]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/texwindow.cpp
Merge branch 'NateEag-master-patch-12920' into 'master'
[xonotic/netradiant.git] / radiant / texwindow.cpp
index c0320fd9d4b48e86b00bd6d4be7f855e324a9cac..22559b6adc6a2ac8ec5fec3fd7516465bd202fda 100644 (file)
@@ -151,9 +151,6 @@ void TextureGroups_addShader( TextureGroups& groups, const char* shaderName ){
                if ( isNotex( shaderName ) ) {
                        return;
                }
-               if ( isNotex( texture ) ) {
-                       return;
-               }
        }
 
        if ( texture != shaderName ) {
@@ -396,10 +393,10 @@ TextureBrowser() :
        m_rmbSelected( false ),
        m_searchedTags( false ),
        m_tags( false ),
+       m_move_started( false ),
        m_uniformTextureSize( 160 ),
        m_uniformTextureMinSize( 48 ),
-       m_hideNonShadersInCommon( true ),
-       m_move_started( false ){
+       m_hideNonShadersInCommon( true ){
 }
 };
 
@@ -550,9 +547,6 @@ bool Texture_IsShown( IShader* shader, bool show_shaders, bool show_textures, bo
                if ( isNotex( shader->getName() ) ) {
                        return false;
                }
-               if ( isNotex( shader->getTexture()->name ) ) {
-                       return false;
-               }
        }
 
        if ( g_TextureBrowser_currentDirectory == "Untagged" ) {
@@ -888,6 +882,7 @@ void visit( const char* minor, const _QERPlugImageTable& table ) const {
 };
 
 void TextureBrowser_ShowDirectory( TextureBrowser& textureBrowser, const char* directory ){
+       textureBrowser.m_searchedTags = false;
        if ( TextureBrowser_showWads() ) {
                g_TextureBrowser_currentDirectory = directory;
                TextureBrowser_heightChanged( textureBrowser );
@@ -1128,25 +1123,15 @@ IShader* Texture_At( TextureBrowser& textureBrowser, int mx, int my ){
    By mouse click
    ==============
  */
-void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, bool bShift ){
-       IShader* shader = Texture_At( textureBrowser, mx, my );
-       if ( shader != 0 ) {
-               if ( bShift ) {
-                       if ( shader->IsDefault() ) {
-                               globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n";
-                       }
-                       else{
-                               ViewShader( shader->getShaderFileName(), shader->getName() );
-                       }
-               }
-               else
-               {
+void SelectTexture( TextureBrowser& textureBrowser, int mx, int my, guint32 flags, bool texturizeSelection ){
+       if ( ( flags & GDK_SHIFT_MASK ) == 0 ) {
+               IShader* shader = Texture_At( textureBrowser, mx, my );
+               if ( shader != 0 ) {
                        TextureBrowser_SetSelectedShader( textureBrowser, shader->getName() );
                        TextureBrowser_textureSelected( shader->getName() );
 
-                       if ( !FindTextureDialog_isOpen() && !textureBrowser.m_rmbSelected ) {
-                               UndoableCommand undo( "textureNameSetSelected" );
-                               Select_SetShader( shader->getName() );
+                       if ( !FindTextureDialog_isOpen() && !textureBrowser.m_rmbSelected && !texturizeSelection ) {
+                               Select_SetShader_Undo( shader->getName() );
                        }
                }
        }
@@ -1192,8 +1177,22 @@ void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
        textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser );
 }
 
-void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){
-       SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, ( flags & GDK_SHIFT_MASK ) != 0 );
+void TextureBrowser_Selection_MouseDown( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy, bool texturizeSelection ){
+       SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, flags, texturizeSelection );
+}
+
+void TextureBrowser_Selection_MouseUp( TextureBrowser& textureBrowser, guint32 flags, int pointx, int pointy ){
+       if ( ( flags & GDK_SHIFT_MASK ) != 0 ) {
+               IShader* shader = Texture_At( textureBrowser, pointx, textureBrowser.height - 1 - pointy );
+               if ( shader != 0 ) {
+                       if ( shader->IsDefault() ) {
+                               globalOutputStream() << "ERROR: " << shader->getName() << " is not a shader, it's a texture.\n";
+                       }
+                       else{
+                               ViewShader( shader->getShaderFileName(), shader->getName(), ( flags & GDK_CONTROL_MASK ) != 0 );
+                       }
+               }
+       }
 }
 
 /*
@@ -1530,10 +1529,11 @@ void BuildStoreAvailableTags(   ui::ListStore storeAvailable,
 
 gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event, TextureBrowser* textureBrowser ){
        if ( event->type == GDK_BUTTON_PRESS ) {
+               gtk_widget_grab_focus( widget );
                if ( event->button == 3 ) {
                        if ( textureBrowser->m_tags ) {
                                textureBrowser->m_rmbSelected = true;
-                               TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+                               TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ), false );
 
                                BuildStoreAssignedTags( textureBrowser->m_assigned_store, textureBrowser->shader.c_str(), textureBrowser );
                                BuildStoreAvailableTags( textureBrowser->m_available_store, textureBrowser->m_assigned_store, textureBrowser->m_all_tags, textureBrowser );
@@ -1549,8 +1549,8 @@ gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event,
                                TextureBrowser_Tracking_MouseDown( *textureBrowser );
                        }
                }
-               else if ( event->button == 1 ) {
-                       TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+               else if ( event->button == 1 || event->button == 2 ) {
+                       TextureBrowser_Selection_MouseDown( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ), event->button == 2 );
 
                        if ( textureBrowser->m_tags ) {
                                textureBrowser->m_rmbSelected = false;
@@ -1562,7 +1562,6 @@ gboolean TextureBrowser_button_press( ui::Widget widget, GdkEventButton* event,
                #define GARUX_DISABLE_2BUTTON
                #ifndef GARUX_DISABLE_2BUTTON
                CopiedString texName = textureBrowser->shader;
-               //const char* sh = texName.c_str();
                char* sh = const_cast<char*>( texName.c_str() );
                char* dir = strrchr( sh, '/' );
                if( dir != NULL ){
@@ -1595,6 +1594,9 @@ gboolean TextureBrowser_button_release( ui::Widget widget, GdkEventButton* event
                                TextureBrowser_Tracking_MouseUp( *textureBrowser );
                        }
                }
+               if ( event->button == 1 ) {
+                       TextureBrowser_Selection_MouseUp( *textureBrowser, event->state, static_cast<int>( event->x ), static_cast<int>( event->y ) );
+               }
        }
        return FALSE;
 }
@@ -1604,6 +1606,10 @@ gboolean TextureBrowser_motion( ui::Widget widget, GdkEventMotion *event, Textur
 }
 
 gboolean TextureBrowser_scroll( ui::Widget widget, GdkEventScroll* event, TextureBrowser* textureBrowser ){
+       gtk_widget_grab_focus( widget );
+       if( !gtk_window_is_active( textureBrowser->m_parent ) )
+               gtk_window_present( textureBrowser->m_parent );
+
        if ( event->direction == GDK_SCROLL_UP ) {
                TextureBrowser_MouseWheel( *textureBrowser, true );
        }
@@ -1892,6 +1898,8 @@ ui::MenuItem TextureBrowser_constructViewMenu( ui::Menu menu ){
        }
 
        create_check_menu_item_with_mnemonic( menu, "Hide _Unused", "ShowInUse" );
+       create_menu_item_with_mnemonic( menu, "Show All", "ShowAllTextures" );
+
        if ( string_empty( g_pGameDescription->getKeyValue( "show_wads" ) ) ) {
                create_check_menu_item_with_mnemonic( menu, "Hide Image Missing", "FilterMissing" );
        }
@@ -2137,6 +2145,7 @@ void TextureBrowser_searchTags(){
                                TextureDirectory_loadTexture( path.c_str(), name.c_str() );
                        }
                }
+               TextureBrowser_SetHideUnused( textureBrowser, false );
                textureBrowser.m_searchedTags = true;
                g_TextureBrowser_currentDirectory = tags_searched;
 
@@ -3108,10 +3117,6 @@ void TextureBrowser_Destroy(){
        Textures_setModeChangedNotify( Callback<void()>() );
 }
 
-ui::Widget TextureBrowser_getGLWidget(){
-       return GlobalTextureBrowser().m_gl_widget;
-}
-
 #if WORKAROUND_WINDOWS_GTK2_GLWIDGET
 ui::GLArea TextureBrowser_getGLWidget(){
        return GlobalTextureBrowser().m_gl_widget;