]> git.xonotic.org Git - xonotic/netradiant.git/blobdiff - radiant/texwindow.cpp
Merge commit '8d6828cd68e9104c2c68b962b341b4f572b4bc38' into master-merge
[xonotic/netradiant.git] / radiant / texwindow.cpp
index 4068f27b551b7ebab1314e0361edb0d021ad5d3b..282ae0e7993bd7662108ffd904f90cebf16d3002 100644 (file)
@@ -1128,19 +1128,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() );
 
@@ -1193,7 +1184,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 );
+                       }
+               }
+       }
 }
 
 /*
@@ -1595,6 +1600,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;
 }
@@ -1845,6 +1853,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;
@@ -1859,6 +1869,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;
 }
 
@@ -2331,7 +2345,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
 
                TextureBrowser_createTreeViewTree();
 
-               gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tree ), textureBrowser.m_treeViewTree  );
+               //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tree ), textureBrowser.m_treeViewTree  );
+               gtk_container_add( GTK_CONTAINER( textureBrowser.m_scr_win_tree ), GTK_WIDGET( textureBrowser.m_treeViewTree ) );
+
                textureBrowser.m_treeViewTree.show();
        }
        { // gl_widget scrollbar
@@ -2384,6 +2400,7 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
                }
                { // tag menu bar
                        auto menu_tags = ui::Menu(ui::New);
+                       gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" );
                        // auto tags_item = TextureBrowser_constructTagsMenu( menu_tags );
                        TextureBrowser_constructTagsMenu( menu_tags );
                        // gtk_menu_item_set_submenu( GTK_MENU_ITEM( tags_item ), menu_tags );
@@ -2392,6 +2409,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
                        auto button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png" );
                        button.dimensions( 22, 22 );
                        button.connect( "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags );
+
+                       //to show detached menu over floating tex bro and main wnd...
+                       gtk_menu_attach_to_widget( GTK_MENU( menu_tags ), GTK_WIDGET( button ), NULL );
                }
                { // Tag TreeView
                        textureBrowser.m_scr_win_tags = ui::ScrolledWindow(ui::New);
@@ -2405,7 +2425,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
             auto selection = gtk_tree_view_get_selection(textureBrowser.m_treeViewTags );
                        gtk_tree_selection_set_mode( selection, GTK_SELECTION_MULTIPLE );
 
-                       gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tags ), textureBrowser.m_treeViewTags  );
+                       //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( textureBrowser.m_scr_win_tags ), textureBrowser.m_treeViewTags  );
+                       gtk_container_add( GTK_CONTAINER( textureBrowser.m_scr_win_tags ), GTK_WIDGET( textureBrowser.m_treeViewTags ) );
+
                        textureBrowser.m_treeViewTags.show();
                }
                { // Texture/Tag notebook
@@ -2454,7 +2476,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
                        textureBrowser.m_assigned_tree.show();
 
                        scrolled_win.show();
-                       gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_assigned_tree  );
+
+                       //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_assigned_tree  );
+                       gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( textureBrowser.m_available_tree ) );
 
                        frame_table.attach(scrolled_win, {0, 1, 1, 3}, {GTK_FILL, GTK_FILL});
                }
@@ -2482,7 +2506,9 @@ ui::Widget TextureBrowser_constructWindow( ui::Window toplevel ){
                        textureBrowser.m_available_tree.show();
 
                        scrolled_win.show();
-                       gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_available_tree  );
+
+                       //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( scrolled_win ), textureBrowser.m_available_tree  );
+                       gtk_container_add( GTK_CONTAINER( scrolled_win ), GTK_WIDGET( textureBrowser.m_available_tree ) );
 
                        frame_table.attach(scrolled_win, {2, 3, 1, 3}, {GTK_FILL, GTK_FILL});
                }