]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/texwindow.cpp
Merge commit '461d008daa6328113ea4ccda37e5604d3df14ba3' into garux-merge
[xonotic/netradiant.git] / radiant / texwindow.cpp
index 6eab79a4d26ee7c2f92698ac57fbd3ab38171340..00969834e90e47146e3a65723589043bb39c1885 100644 (file)
@@ -393,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 ){
 }
 };
 
@@ -868,6 +868,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() ) {
                Archive* archive = GlobalFileSystem().getArchive( directory );
                ASSERT_NOTNULL( archive );
@@ -1075,19 +1076,10 @@ 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 ){
+       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() );
 
@@ -1136,7 +1128,21 @@ void TextureBrowser_Tracking_MouseDown( TextureBrowser& 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 );
+       SelectTexture( textureBrowser, pointx, textureBrowser.height - 1 - pointy, flags );
+}
+
+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 );
+                       }
+               }
+       }
 }
 
 /*
@@ -1472,6 +1478,7 @@ 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 ( GlobalTextureBrowser().m_tags ) {
                                textureBrowser->m_rmbSelected = true;
@@ -1537,6 +1544,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;
 }
@@ -1546,6 +1556,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 );
        }
@@ -1767,6 +1781,8 @@ void TextureBrowser_createContextMenu( ui::Widget treeview, GdkEventButton *even
                                        gdk_event_get_time( (GdkEvent*)event ) );
 }
 
+void TextureBrowser_searchTags();
+
 gboolean TreeViewTags_onButtonPressed( ui::TreeView treeview, GdkEventButton *event ){
        if ( event->type == GDK_BUTTON_PRESS && event->button == 3 ) {
                GtkTreePath *path;
@@ -1781,6 +1797,10 @@ gboolean TreeViewTags_onButtonPressed( ui::TreeView treeview, GdkEventButton *ev
                TextureBrowser_createContextMenu( treeview, event );
                return TRUE;
        }
+       if( event->type == GDK_2BUTTON_PRESS && event->button == 1 ){
+               TextureBrowser_searchTags();
+               return TRUE;
+       }
        return FALSE;
 }