diff --git a/include/irender.h b/include/irender.h index 962b78e6..658588a5 100644 --- a/include/irender.h +++ b/include/irender.h @@ -39,7 +39,7 @@ const unsigned int RENDER_ALPHATEST = 1 << 4; // glEnable(GL_ALPHA_TEST) const unsigned int RENDER_DEPTHTEST = 1 << 5; // glEnable(GL_DEPTH_TEST) const unsigned int RENDER_DEPTHWRITE = 1 << 6; // glDepthMask(GL_TRUE) const unsigned int RENDER_COLOURWRITE = 1 << 7; // glColorMask(GL_TRUE; GL_TRUE; GL_TRUE; GL_TRUE) -const unsigned int RENDER_CULLFACE = 1 << 8; // glglEnable(GL_CULL_FACE) +const unsigned int RENDER_CULLFACE = 1 << 8; // glEnable(GL_CULL_FACE) const unsigned int RENDER_SCALED = 1 << 9; // glEnable(GL_NORMALIZE) const unsigned int RENDER_SMOOTH = 1 << 10; // glShadeModel const unsigned int RENDER_FOG = 1 << 11; // glEnable(GL_FOG) diff --git a/libs/gtkutil/cursor.h b/libs/gtkutil/cursor.h index 0d813397..8677f8c5 100644 --- a/libs/gtkutil/cursor.h +++ b/libs/gtkutil/cursor.h @@ -87,15 +87,16 @@ MotionDeltaFunction m_function; void* m_data; static gboolean deferred_motion( gpointer data ){ - reinterpret_cast( data )->m_function( - reinterpret_cast( data )->m_delta_x, - reinterpret_cast( data )->m_delta_y, - reinterpret_cast( data )->m_state, - reinterpret_cast( data )->m_data + DeferredMotionDelta* self = reinterpret_cast( data ); + self->m_function( + self->m_delta_x, + self->m_delta_y, + self->m_state, + self->m_data ); - reinterpret_cast( data )->m_motion_handler = 0; - reinterpret_cast( data )->m_delta_x = 0; - reinterpret_cast( data )->m_delta_y = 0; + self->m_motion_handler = 0; + self->m_delta_x = 0; + self->m_delta_y = 0; return FALSE; } public: @@ -121,7 +122,8 @@ class FreezePointer { unsigned int handle_motion; int recorded_x, recorded_y, last_x, last_y, center_x, center_y; -GtkWidget* m_weedjet; +GtkWindow* m_window; +GtkWidget* m_widget; typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data ); MotionDeltaFunction m_function; void* m_data; @@ -163,7 +165,7 @@ static gboolean motion_delta( GtkWidget *widget, GdkEventMotion *event, FreezePo } void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction function, void* data ){ - ASSERT_MESSAGE( m_function == 0, "can't freeze pointer" ); + ASSERT_MESSAGE( m_function == 0, "can't freeze pointer: already frozen" ); const GdkEventMask mask = static_cast( GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK @@ -178,19 +180,18 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f GdkCursor* cursor = gdk_cursor_new( GDK_BLANK_CURSOR ); //GdkCursor* cursor = create_blank_cursor(); //GdkGrabStatus status = - /* fixes cursor runaways during srsly quick drags in camera - drags with pressed buttons have no problem at all w/o this */ + /* fixes cursor runaways during srsly quick drags in camera + drags with pressed buttons have no problem at all w/o this */ gdk_pointer_grab( GTK_WIDGET( window )->window, TRUE, mask, 0, cursor, GDK_CURRENT_TIME ); //gdk_window_set_cursor ( GTK_WIDGET( window )->window, cursor ); - /* is needed to fix activating neighbour widgets, that happens, if using upper one */ + /* is needed to fix activating neighbor widgets, that happens, if using upper one */ gtk_grab_add( widget ); - m_weedjet = widget; gdk_cursor_unref( cursor ); Sys_GetCursorPos( window, &recorded_x, &recorded_y ); - /* using center for tracking for max safety */ + /* using center for tracking for max safety */ gdk_window_get_origin( widget->window, ¢er_x, ¢er_y ); center_y += widget->allocation.height / 2; center_x += widget->allocation.width / 2; @@ -200,28 +201,33 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f last_x = center_x; last_y = center_y; + m_widget = widget; + m_window = window; + m_function = function; m_data = data; handle_motion = g_signal_connect( G_OBJECT( window ), "motion_notify_event", G_CALLBACK( motion_delta ), this ); } -void unfreeze_pointer( GtkWindow* window, bool centerize ){ - g_signal_handler_disconnect( G_OBJECT( window ), handle_motion ); +void unfreeze_pointer( bool centerize ){ + ASSERT_MESSAGE( m_function != 0, "can't unfreeze pointer: is not frozen" ); + + g_signal_handler_disconnect( G_OBJECT( m_window ), handle_motion ); m_function = 0; m_data = 0; if( centerize ){ - Sys_SetCursorPos( window, center_x, center_y ); + Sys_SetCursorPos( m_window, center_x, center_y ); } else{ - Sys_SetCursorPos( window, recorded_x, recorded_y ); + Sys_SetCursorPos( m_window, recorded_x, recorded_y ); } -// gdk_window_set_cursor( GTK_WIDGET( window )->window, 0 ); +// gdk_window_set_cursor( GTK_WIDGET( m_window )->window, 0 ); gdk_pointer_ungrab( GDK_CURRENT_TIME ); - if( m_weedjet ) - gtk_grab_remove( m_weedjet ); + + gtk_grab_remove( m_widget ); } }; @@ -238,12 +244,13 @@ ValueChangedFunction m_function; void* m_data; static gboolean deferred_value_changed( gpointer data ){ - reinterpret_cast( data )->m_function( - reinterpret_cast( data )->m_data, - reinterpret_cast( data )->m_value + DeferredAdjustment* self = reinterpret_cast( data ); + self->m_function( + self->m_data, + self->m_value ); - reinterpret_cast( data )->m_handler = 0; - reinterpret_cast( data )->m_value = 0; + self->m_handler = 0; + self->m_value = 0; return FALSE; } public: diff --git a/radiant/camwindow.cpp b/radiant/camwindow.cpp index 53a2bf67..587aa401 100644 --- a/radiant/camwindow.cpp +++ b/radiant/camwindow.cpp @@ -1856,7 +1856,7 @@ void CamWnd::DisableFreeMove(){ CamWnd_Remove_Handlers_FreeMove( *this ); CamWnd_Add_Handlers_Move( *this ); - m_freezePointer.unfreeze_pointer( m_parent, true ); + m_freezePointer.unfreeze_pointer( true ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_freemove_handle_focusout ); CamWnd_Update( *this ); diff --git a/radiant/entity.cpp b/radiant/entity.cpp index bb15d9e8..f6d41bde 100644 --- a/radiant/entity.cpp +++ b/radiant/entity.cpp @@ -432,6 +432,8 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){ entitypath.push( makeReference( node.get() ) ); scene::Instance& instance = findInstance( entitypath ); + Entity* entity = Node_getEntity( node ); + if ( entityClass->fixedsize || ( isModel && !brushesSelected ) ) { //Select_Delete(); @@ -449,7 +451,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){ else { if ( g_pGameDescription->mGameType == "doom3" ) { - Node_getEntity( node )->setKeyValue( "model", Node_getEntity( node )->getKeyValue( "name" ) ); + entity->setKeyValue( "model", entity->getKeyValue( "name" ) ); } Scene_parentSelectedBrushesToEntity( GlobalSceneGraph(), node ); @@ -470,7 +472,7 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){ g_iLastLightIntensity = intensity; char buf[30]; sprintf( buf, "255 255 255 %d", intensity ); - Node_getEntity( node )->setKeyValue( "_light", buf ); + entity->setKeyValue( "_light", buf ); } } } @@ -482,24 +484,24 @@ void Entity_createFromSelection( const char* name, const Vector3& origin ){ g_iLastLightIntensity = intensity; char buf[10]; sprintf( buf, "%d", intensity ); - Node_getEntity( node )->setKeyValue( "light", buf ); + entity->setKeyValue( "light", buf ); } } else if ( brushesSelected ) { // use workzone to set light position/size for doom3 lights, if there are brushes selected AABB bounds( Doom3Light_getBounds( workzone ) ); StringOutputStream key( 64 ); key << bounds.origin[0] << " " << bounds.origin[1] << " " << bounds.origin[2]; - Node_getEntity( node )->setKeyValue( "origin", key.c_str() ); + entity->setKeyValue( "origin", key.c_str() ); key.clear(); key << bounds.extents[0] << " " << bounds.extents[1] << " " << bounds.extents[2]; - Node_getEntity( node )->setKeyValue( "light_radius", key.c_str() ); + entity->setKeyValue( "light_radius", key.c_str() ); } } if ( isModel ) { const char* model = misc_model_dialog( GTK_WIDGET( MainFrame_getWindow() ) ); if ( model != 0 ) { - Node_getEntity( node )->setKeyValue( entityClass->miscmodel_key() , model ); + entity->setKeyValue( entityClass->miscmodel_key(), model ); } } } diff --git a/radiant/mainframe.cpp b/radiant/mainframe.cpp index daaa60c5..f66a8782 100644 --- a/radiant/mainframe.cpp +++ b/radiant/mainframe.cpp @@ -3125,6 +3125,12 @@ void MainFrame::Create(){ if ( FloatingGroupDialog() ) { g_page_console = GroupDialog_addPage( "Console", Console_constructWindow( GroupDialog_getWindow() ), RawStringExportCaller( "Console" ) ); + { + GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) ); + g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() ); + /* workaround for gtk 2.24 issue: not displayed glwidget after toggle */ + g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() ); + } } { @@ -3146,49 +3152,47 @@ void MainFrame::Create(){ gtk_widget_show( GTK_WIDGET( window ) ); if ( CurrentStyle() == eRegular || CurrentStyle() == eRegularLeft ) { + GtkWidget* hsplit = gtk_hpaned_new(); + m_hSplit = hsplit; + gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 ); + gtk_widget_show( hsplit ); { - GtkWidget* hsplit = gtk_hpaned_new(); - m_hSplit = hsplit; - gtk_box_pack_start( GTK_BOX( vbox ), hsplit, TRUE, TRUE, 0 ); - gtk_widget_show( hsplit ); + GtkWidget* vsplit = gtk_vpaned_new(); + gtk_widget_show( vsplit ); + m_vSplit = vsplit; + GtkWidget* vsplit2 = gtk_vpaned_new(); + gtk_widget_show( vsplit2 ); + m_vSplit2 = vsplit2; + if ( CurrentStyle() == eRegular ){ + gtk_paned_pack1( GTK_PANED( hsplit ), vsplit, TRUE, TRUE ); + gtk_paned_pack2( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE ); + } + else{ + gtk_paned_pack2( GTK_PANED( hsplit ), vsplit, TRUE, TRUE ); + gtk_paned_pack1( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE ); + } + // console + GtkWidget* console_window = Console_constructWindow( window ); + gtk_paned_pack2( GTK_PANED( vsplit ), console_window, TRUE, TRUE ); + + // xy + m_pXYWnd = new XYWnd(); + m_pXYWnd->SetViewType( XY ); + GtkWidget* xy_window = GTK_WIDGET( create_framed_widget( m_pXYWnd->GetWidget() ) ); + gtk_paned_pack1( GTK_PANED( vsplit ), xy_window, TRUE, TRUE ); { - GtkWidget* vsplit = gtk_vpaned_new(); - gtk_widget_show( vsplit ); - m_vSplit = vsplit; - GtkWidget* vsplit2 = gtk_vpaned_new(); - gtk_widget_show( vsplit2 ); - m_vSplit2 = vsplit2; - if ( CurrentStyle() == eRegular ){ - gtk_paned_pack1( GTK_PANED( hsplit ), vsplit, TRUE, TRUE ); - gtk_paned_pack2( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE ); - } - else{ - gtk_paned_pack2( GTK_PANED( hsplit ), vsplit, TRUE, TRUE ); - gtk_paned_pack1( GTK_PANED( hsplit ), vsplit2, TRUE, TRUE ); - } - // console - GtkWidget* console_window = Console_constructWindow( window ); - gtk_paned_pack2( GTK_PANED( vsplit ), console_window, TRUE, TRUE ); + // camera + m_pCamWnd = NewCamWnd(); + GlobalCamera_setCamWnd( *m_pCamWnd ); + CamWnd_setParent( *m_pCamWnd, window ); + GtkFrame* camera_window = create_framed_widget( CamWnd_getWidget( *m_pCamWnd ) ); - // xy - m_pXYWnd = new XYWnd(); - m_pXYWnd->SetViewType( XY ); - GtkWidget* xy_window = GTK_WIDGET( create_framed_widget( m_pXYWnd->GetWidget() ) ); - gtk_paned_pack1( GTK_PANED( vsplit ), xy_window, TRUE, TRUE ); - { - // camera - m_pCamWnd = NewCamWnd(); - GlobalCamera_setCamWnd( *m_pCamWnd ); - CamWnd_setParent( *m_pCamWnd, window ); - GtkFrame* camera_window = create_framed_widget( CamWnd_getWidget( *m_pCamWnd ) ); + gtk_paned_pack1( GTK_PANED( vsplit2 ), GTK_WIDGET( camera_window ), TRUE, TRUE ); - gtk_paned_pack1( GTK_PANED( vsplit2 ), GTK_WIDGET( camera_window ), TRUE, TRUE ); + // textures + GtkFrame* texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) ); - // textures - GtkFrame* texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) ); - - gtk_paned_pack2( GTK_PANED( vsplit2 ), GTK_WIDGET( texture_window ), TRUE, TRUE ); - } + gtk_paned_pack2( GTK_PANED( vsplit2 ), GTK_WIDGET( texture_window ), TRUE, TRUE ); } } } @@ -3277,13 +3281,6 @@ void MainFrame::Create(){ g_floating_windows.push_back( GTK_WIDGET( window ) ); } - { - GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) ); - g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() ); - /* workaround for gtk 2.24 issue: not displayed glwidget after toggle */ - g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() ); - } - m_vSplit = 0; m_hSplit = 0; m_vSplit2 = 0; @@ -3315,13 +3312,6 @@ void MainFrame::Create(){ m_hSplit = create_split_views( camera, yz, xy, xz, m_vSplit, m_vSplit2 ); gtk_box_pack_start( GTK_BOX( vbox ), m_hSplit, TRUE, TRUE, 0 ); - - { - GtkFrame* frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) ); - g_page_textures = GroupDialog_addPage( "Textures", GTK_WIDGET( frame ), TextureBrowserExportTitleCaller() ); - /* workaround for gtk 2.24 issue: not displayed glwidget after toggle */ - g_object_set_data( G_OBJECT( g_page_textures ), "glwidget", TextureBrowser_getGLWidget() ); - } } EntityList_constructWindow( window ); diff --git a/radiant/map.cpp b/radiant/map.cpp index ff085b9d..f1a4d278 100644 --- a/radiant/map.cpp +++ b/radiant/map.cpp @@ -718,7 +718,7 @@ void Map_ImportSelected( TextInputStream& in, const MapFormat& format ){ EBrushType brush_type = GlobalBrushCreator().getFormat(); format.readGraph( node, in, GlobalEntityCreator() ); if ( brush_type != GlobalBrushCreator().getFormat() ) { - Node_getTraversable( *node.get_pointer() )->traverse( Convert_Brushes( BrushType_getTexdefType( GlobalBrushCreator().getFormat() ), BrushType_getTexdefType( brush_type ) ) ); + Node_getTraversable( node )->traverse( Convert_Brushes( BrushType_getTexdefType( GlobalBrushCreator().getFormat() ), BrushType_getTexdefType( brush_type ) ) ); GlobalBrushCreator().toggleFormat( brush_type ); } Map_gatherNamespaced( node ); diff --git a/radiant/modelwindow.cpp b/radiant/modelwindow.cpp index e1cfd6e1..757d1b2c 100644 --- a/radiant/modelwindow.cpp +++ b/radiant/modelwindow.cpp @@ -620,7 +620,7 @@ public: void tracking_MouseUp(){ if( m_move_started ){ m_move_started = false; - m_freezePointer.unfreeze_pointer( m_parent, false ); + m_freezePointer.unfreeze_pointer( false ); } } void tracking_MouseDown(){ diff --git a/radiant/texwindow.cpp b/radiant/texwindow.cpp index 9213fd94..8cf1744c 100644 --- a/radiant/texwindow.cpp +++ b/radiant/texwindow.cpp @@ -68,6 +68,7 @@ #include "gtkutil/widget.h" #include "gtkutil/glwidget.h" #include "gtkutil/messagebox.h" +#include "gtkutil/toolbar.h" #include "error.h" #include "map.h" @@ -88,8 +89,6 @@ #include "preferences.h" #include "commands.h" -void TextureBrowser_queueDraw( TextureBrowser& textureBrowser ); - bool string_equal_start( const char* string, StringRange start ){ return string_equal_n( string, start.first, start.last - start.first ); } @@ -135,10 +134,6 @@ bool g_TextureBrowser_filter_searchFromStart = false; -class TextureBrowser; - -typedef ReferenceCaller TextureBrowserQueueDrawCaller; - void TextureBrowser_scrollChanged( void* data, gdouble value ); @@ -259,11 +254,9 @@ bool m_hideNonShadersInCommon; static bool wads; // Return the display width of a texture in the texture browser void getTextureWH( qtexture_t* tex, int &W, int &H ){ - // Don't use uniform size - W = (int)( tex->width * ( (float)m_textureScale / 100 ) ); - H = (int)( tex->height * ( (float)m_textureScale / 100 ) ); - if ( W < 1 ) W = 1; - if ( H < 1 ) H = 1; + // Don't use uniform size + W = std::max( std::size_t( 1 ), tex->width * m_textureScale / 100 ); + H = std::max( std::size_t( 1 ), tex->height * m_textureScale / 100 ); if ( g_TextureBrowser_fixedSize ){ if ( W >= H ) { @@ -329,6 +322,12 @@ void ( *TextureBrowser_textureSelected )( const char* shader ); void TextureBrowser_updateScroll( TextureBrowser& textureBrowser ); +void TextureBrowser_queueDraw( TextureBrowser& textureBrowser ){ + if ( textureBrowser.m_gl_widget != 0 ) { + gtk_widget_queue_draw( textureBrowser.m_gl_widget ); + } +} + const char* TextureBrowser_getComonShadersName(){ const char* value = g_pGameDescription->getKeyValue( "common_shaders_name" ); if ( !string_empty( value ) ) { @@ -612,8 +611,6 @@ void TextureBrowser_addActiveShadersChangedCallback( const SignalHandler& handle g_activeShadersChangedCallbacks.connectLast( handler ); } -void TextureBrowser_constructTreeStore(); - class ShadersObserver : public ModuleObserver { Signal0 m_realiseCallbacks; @@ -989,14 +986,12 @@ void TextureBrowser_trackingDelta( int x, int y, unsigned int state, void* data void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){ if( textureBrowser.m_move_started ){ textureBrowser.m_move_started = false; - textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent, false ); + textureBrowser.m_freezePointer.unfreeze_pointer( false ); } } void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){ - if( textureBrowser.m_move_started ){ - TextureBrowser_Tracking_MouseUp( textureBrowser ); - } + TextureBrowser_Tracking_MouseUp( textureBrowser ); textureBrowser.m_move_started = true; textureBrowser.m_move_amount = 0; textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser ); @@ -1199,12 +1194,6 @@ void Texture_Draw( TextureBrowser& textureBrowser ){ //qglFinish(); } -void TextureBrowser_queueDraw( TextureBrowser& textureBrowser ){ - if ( textureBrowser.m_gl_widget != 0 ) { - gtk_widget_queue_draw( textureBrowser.m_gl_widget ); - } -} - void TextureBrowser_setScale( TextureBrowser& textureBrowser, std::size_t scale ){ textureBrowser.m_textureScale = scale; @@ -1728,7 +1717,7 @@ GtkMenuItem* TextureBrowser_constructViewMenu( GtkMenu* menu ){ return textures_menu_item; } -void Popup_View_Menu( GtkWidget *widget, GtkMenu *menu ){ +void Popup_View_Menu( GtkMenu *menu ){ gtk_menu_popup( menu, NULL, NULL, NULL, NULL, 1, gtk_get_current_event_time() ); } #if 0 @@ -2089,26 +2078,19 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){ GtkToolbar* toolbar; { // menu bar - GtkWidget* menu_view = gtk_menu_new(); - TextureBrowser_constructViewMenu( GTK_MENU( menu_view ) ); - gtk_menu_set_title( GTK_MENU( menu_view ), "View" ); + GtkMenu* menu_view = GTK_MENU( gtk_menu_new() ); + TextureBrowser_constructViewMenu( menu_view ); + gtk_menu_set_title( menu_view, "View" ); toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( toolbar ), FALSE, FALSE, 0 ); //view menu button - GtkButton* button = GTK_BUTTON( gtk_button_new() ); - button_set_icon( button, "texbro_view.png" ); - gtk_widget_show( GTK_WIDGET( button ) ); - gtk_button_set_relief( button, GTK_RELIEF_NONE ); - gtk_widget_set_size_request( GTK_WIDGET( button ), 24, 24 ); - GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS ); - GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT ); - gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "View", "", 0, 0, 0 ); - g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_view ); + GtkButton* button = toolbar_append_button( toolbar, "View", "texbro_view.png", PointerCaller( menu_view ) ); + gtk_widget_set_size_request( GTK_WIDGET( button ), 24, 24 ); // 24 is minimal here for non scissored icon with any gtk theme //show detached menu over floating tex bro - gtk_menu_attach_to_widget( GTK_MENU( menu_view ), GTK_WIDGET( button ), NULL ); + gtk_menu_attach_to_widget( menu_view, GTK_WIDGET( button ), NULL ); button = toolbar_append_button( toolbar, "Find / Replace...", "texbro_gtk-find-and-replace.png", "FindReplaceTextures" ); gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 ); @@ -2117,16 +2099,15 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){ gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 ); gtk_widget_show( GTK_WIDGET( toolbar ) ); } - {//filter entry - GtkWidget* entry = gtk_entry_new(); - gtk_widget_set_size_request( GTK_WIDGET( entry ), 64, -1 ); - gtk_box_pack_start( GTK_BOX( vbox ), GTK_WIDGET( entry ), FALSE, FALSE, 0 ); + { // filter entry + GtkWidget* entry = g_TextureBrowser.m_filter_entry = gtk_entry_new(); + gtk_widget_set_size_request( entry, 64, -1 ); + gtk_box_pack_start( GTK_BOX( vbox ), entry, FALSE, FALSE, 0 ); gtk_entry_set_icon_from_stock( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, GTK_STOCK_CLEAR ); gtk_entry_set_icon_sensitive( GTK_ENTRY( entry ), GTK_ENTRY_ICON_SECONDARY, FALSE ); TextureBrowser_filterSetModeIcon( GTK_ENTRY( entry ) ); gtk_entry_set_icon_tooltip_text( GTK_ENTRY( entry ), GTK_ENTRY_ICON_PRIMARY, "toggle match mode ( start / any position )" ); gtk_widget_show( entry ); - g_TextureBrowser.m_filter_entry = entry; g_signal_connect( G_OBJECT( entry ), "changed", G_CALLBACK( TextureBrowser_filterChanged ), &g_TextureBrowser ); g_signal_connect( G_OBJECT( entry ), "icon-press", G_CALLBACK( TextureBrowser_filterIconPress ), 0 ); g_signal_connect( G_OBJECT( entry ), "key_press_event", G_CALLBACK( TextureBrowser_filterKeypress ), 0 ); @@ -2134,52 +2115,51 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){ g_signal_connect( G_OBJECT( entry ), "leave_notify_event", G_CALLBACK( TextureBrowser_filterEntryUnfocus ), 0 ); } { // Texture TreeView - g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL ); - gtk_container_set_border_width( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tree ), 0 ); + GtkWidget* w = g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new( NULL, NULL ); + gtk_container_set_border_width( GTK_CONTAINER( w ), 0 ); // vertical only scrolling for treeview - gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tree ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS ); + gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( w ), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS ); - gtk_widget_show( g_TextureBrowser.m_scr_win_tree ); + gtk_widget_show( w ); TextureBrowser_createTreeViewTree(); - //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( g_TextureBrowser.m_scr_win_tree ), g_TextureBrowser.m_treeViewTree ); - gtk_container_add( GTK_CONTAINER( g_TextureBrowser.m_scr_win_tree ), g_TextureBrowser.m_treeViewTree ); //GtkTreeView has native scrolling support; should not be used with the GtkViewport proxy. - gtk_widget_show( GTK_WIDGET( g_TextureBrowser.m_treeViewTree ) ); + //gtk_scrolled_window_add_with_viewport( GTK_SCROLLED_WINDOW( w ), g_TextureBrowser.m_treeViewTree ); + gtk_container_add( GTK_CONTAINER( w ), g_TextureBrowser.m_treeViewTree ); //GtkTreeView has native scrolling support; should not be used with the GtkViewport proxy. + gtk_widget_show( g_TextureBrowser.m_treeViewTree ); } { // gl_widget scrollbar - GtkWidget* w = gtk_vscrollbar_new( GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 0, 1, 1, 0 ) ) ); + GtkWidget* w = g_TextureBrowser.m_texture_scroll = gtk_vscrollbar_new( GTK_ADJUSTMENT( gtk_adjustment_new( 0, 0, 0, 1, 1, 0 ) ) ); gtk_table_attach( GTK_TABLE( table ), w, 2, 3, 1, 2, GTK_SHRINK, GTK_FILL, 0, 0 ); gtk_widget_show( w ); - g_TextureBrowser.m_texture_scroll = w; - GtkAdjustment *vadjustment = gtk_range_get_adjustment( GTK_RANGE( g_TextureBrowser.m_texture_scroll ) ); + GtkAdjustment *vadjustment = gtk_range_get_adjustment( GTK_RANGE( w ) ); g_signal_connect( G_OBJECT( vadjustment ), "value_changed", G_CALLBACK( TextureBrowser_verticalScroll ), &g_TextureBrowser ); - widget_set_visible( g_TextureBrowser.m_texture_scroll, g_TextureBrowser.m_showTextureScrollbar ); + widget_set_visible( w, g_TextureBrowser.m_showTextureScrollbar ); } { // gl_widget #if NV_DRIVER_GAMMA_BUG - g_TextureBrowser.m_gl_widget = glwidget_new( TRUE ); + GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( TRUE ); #else - g_TextureBrowser.m_gl_widget = glwidget_new( FALSE ); + GtkWidget* w = g_TextureBrowser.m_gl_widget = glwidget_new( FALSE ); #endif - gtk_widget_ref( g_TextureBrowser.m_gl_widget ); + gtk_widget_ref( w ); - gtk_widget_set_events( g_TextureBrowser.m_gl_widget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK ); - GTK_WIDGET_SET_FLAGS( g_TextureBrowser.m_gl_widget, GTK_CAN_FOCUS ); + gtk_widget_set_events( w, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK ); + GTK_WIDGET_SET_FLAGS( w, GTK_CAN_FOCUS ); - gtk_table_attach_defaults( GTK_TABLE( table ), g_TextureBrowser.m_gl_widget, 1, 2, 1, 2 ); - gtk_widget_show( g_TextureBrowser.m_gl_widget ); + gtk_table_attach_defaults( GTK_TABLE( table ), w, 1, 2, 1, 2 ); + gtk_widget_show( w ); - g_TextureBrowser.m_sizeHandler = g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "size_allocate", G_CALLBACK( TextureBrowser_size_allocate ), &g_TextureBrowser ); - g_TextureBrowser.m_exposeHandler = g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "expose_event", G_CALLBACK( TextureBrowser_expose ), &g_TextureBrowser ); + g_TextureBrowser.m_sizeHandler = g_signal_connect( G_OBJECT( w ), "size_allocate", G_CALLBACK( TextureBrowser_size_allocate ), &g_TextureBrowser ); + g_TextureBrowser.m_exposeHandler = g_signal_connect( G_OBJECT( w ), "expose_event", G_CALLBACK( TextureBrowser_expose ), &g_TextureBrowser ); - g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "button_press_event", G_CALLBACK( TextureBrowser_button_press ), &g_TextureBrowser ); - g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "button_release_event", G_CALLBACK( TextureBrowser_button_release ), &g_TextureBrowser ); - g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "motion_notify_event", G_CALLBACK( TextureBrowser_motion ), &g_TextureBrowser ); - g_signal_connect( G_OBJECT( g_TextureBrowser.m_gl_widget ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser ); + g_signal_connect( G_OBJECT( w ), "button_press_event", G_CALLBACK( TextureBrowser_button_press ), &g_TextureBrowser ); + g_signal_connect( G_OBJECT( w ), "button_release_event", G_CALLBACK( TextureBrowser_button_release ), &g_TextureBrowser ); + g_signal_connect( G_OBJECT( w ), "motion_notify_event", G_CALLBACK( TextureBrowser_motion ), &g_TextureBrowser ); + g_signal_connect( G_OBJECT( w ), "scroll_event", G_CALLBACK( TextureBrowser_scroll ), &g_TextureBrowser ); } // tag stuff @@ -2193,26 +2173,15 @@ GtkWidget* TextureBrowser_constructWindow( GtkWindow* toplevel ){ TextureBrowser_buildTagList(); } { // tag menu bar - GtkWidget* menu_tags = gtk_menu_new(); - gtk_menu_set_title( GTK_MENU( menu_tags ), "Tags" ); - TextureBrowser_constructTagsMenu( GTK_MENU( menu_tags ) ); + GtkMenu* menu_tags = GTK_MENU( gtk_menu_new() ); + gtk_menu_set_title( menu_tags, "Tags" ); + TextureBrowser_constructTagsMenu( menu_tags ); - GtkButton* button = GTK_BUTTON( gtk_button_new() ); - button_set_icon( button, "texbro_tags.png" ); -// GtkWidget *label = gtk_label_new ( ">t" ); -// gtk_container_add( GTK_CONTAINER( button ), label ); -// gtk_widget_show( label ); - - gtk_widget_show( GTK_WIDGET( button ) ); - gtk_button_set_relief( button, GTK_RELIEF_NONE ); + GtkButton* button = toolbar_append_button( toolbar, "Tags", "texbro_tags.png", PointerCaller( menu_tags ) ); gtk_widget_set_size_request( GTK_WIDGET( button ), 22, 22 ); - GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_FOCUS ); - GTK_WIDGET_UNSET_FLAGS( GTK_WIDGET( button ), GTK_CAN_DEFAULT ); - gtk_toolbar_append_element( toolbar, GTK_TOOLBAR_CHILD_WIDGET, GTK_WIDGET( button ), "", "Tags", "", 0, 0, 0 ); - g_signal_connect( G_OBJECT( button ), "clicked", G_CALLBACK( Popup_View_Menu ), menu_tags ); //show detached menu over floating tex bro and main wnd... - gtk_menu_attach_to_widget( GTK_MENU( menu_tags ), GTK_WIDGET( button ), NULL ); + gtk_menu_attach_to_widget( menu_tags, GTK_WIDGET( button ), NULL ); } { // Tag TreeView g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new( NULL, NULL ); diff --git a/radiant/xywindow.cpp b/radiant/xywindow.cpp index 6ff592b5..406ae4b5 100644 --- a/radiant/xywindow.cpp +++ b/radiant/xywindow.cpp @@ -1077,7 +1077,7 @@ void XYWnd::Move_Begin(){ void XYWnd::Move_End(){ m_move_started = false; - g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false ); + g_xywnd_freezePointer.unfreeze_pointer( false ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_move_focusOut ); } @@ -1127,7 +1127,7 @@ void XYWnd::Zoom_Begin( int x, int y ){ void XYWnd::Zoom_End(){ m_zoom_started = false; - g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false ); + g_xywnd_freezePointer.unfreeze_pointer( false ); g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_zoom_focusOut ); }