]> de.git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge commit '01a950c3de3ef7f7da23360f925404e2bd385d5d' into master-merge
authorThomas Debesse <dev@illwieckz.net>
Tue, 21 Jun 2022 00:17:20 +0000 (02:17 +0200)
committerThomas Debesse <dev@illwieckz.net>
Tue, 21 Jun 2022 00:17:20 +0000 (02:17 +0200)
1  2 
libs/gtkutil/cursor.cpp
libs/gtkutil/cursor.h
radiant/camwindow.cpp
radiant/gtkdlgs.cpp
radiant/mainframe.cpp
radiant/texwindow.cpp
radiant/xywindow.cpp

index fd11c7799844b2600ae79e033a670612597a6ec1,70a0856b68ea9af66e3fbdcbf287825bce8b677e..a58c6cf09af054a233a07309cc8c168f9257531b
  #include <gdk/gdk.h>
  #include <gtk/gtk.h>
  
 -#if 0
++// Note: NetRadiantCustom disables them but we still make use of them.
++#if 1
  GdkCursor* create_blank_cursor(){
-       return gdk_cursor_new( GDK_BLANK_CURSOR );
+       return gdk_cursor_new(GDK_BLANK_CURSOR);
  }
  
 -void blank_cursor( ui::Widget widget ){
 -      GdkCursor* cursor = create_blank_cursor();
 +void set_cursor( ui::Widget widget, GdkCursorType cursor_type ){
 +      GdkCursor* cursor = gdk_cursor_new( cursor_type );
-       gdk_window_set_cursor( gtk_widget_get_window( widget ), cursor );
+       gdk_window_set_cursor( gtk_widget_get_window(widget), cursor );
        gdk_cursor_unref( cursor );
  }
  
 +void blank_cursor( ui::Widget widget ){
 +      set_cursor( widget, GDK_BLANK_CURSOR );
 +}
 +
  void default_cursor( ui::Widget widget ){
 -      gdk_window_set_cursor( gtk_widget_get_window(widget), 0 );
 +      gdk_window_set_cursor( gtk_widget_get_window( widget ), NULL );
  }
+ #endif
  
 -
 -void Sys_GetCursorPos( ui::Window window, int *x, int *y ){
 -      gdk_display_get_pointer( gdk_display_get_default(), 0, x, y, 0 );
 +void Sys_GetCursorPos( ui::Widget widget, int *x, int *y ){
 +      GdkDisplay *display = gtk_widget_get_display( GTK_WIDGET( widget ) );
 +      // No need to store the screen, it will be recovered from widget again.
 +      gdk_display_get_pointer( display, NULL, x, y, NULL );
  }
  
 -void Sys_SetCursorPos( ui::Window window, int x, int y ){
 -      GdkScreen *screen;
 -      gdk_display_get_pointer( gdk_display_get_default(), &screen, 0, 0, 0 );
 -      gdk_display_warp_pointer( gdk_display_get_default(), screen, x, y );
 +void Sys_SetCursorPos( ui::Widget widget, int x, int y ){
 +      GdkDisplay *display = gtk_widget_get_display( GTK_WIDGET( widget ) );
 +      GdkScreen *screen = gtk_widget_get_screen( GTK_WIDGET( widget ) );
 +      gdk_display_warp_pointer( display, screen, x, y );
  }
  
  gboolean DeferredMotion::gtk_motion(ui::Widget widget, GdkEventMotion *event, DeferredMotion *self)
@@@ -214,12 -121,7 +217,13 @@@ void FreezePointer::unfreeze_pointer(ui
        m_function = 0;
        m_data = 0;
  
 -      Sys_SetCursorPos( window, recorded_x, recorded_y );
 +#if defined(WORKAROUND_MACOS_GTK2_LAGGYPOINTER)
 +      /* The pointer was visible during all the move operation,
 +      so, keep the current position. */
 +#else
++      // Note: NetRadiantCustom still uses window instead of widget.
 +      Sys_SetCursorPos( widget, recorded_x, recorded_y );
 +#endif
  
        gdk_pointer_ungrab( GDK_CURRENT_TIME );
  }
index 77cb776123d7a03621f64fd32b66af2a17951497,3b873db4f92e88fffc0b1a8e087c51282148a1aa..db0234d7c50e1ed58efb5bf6bcb4c6869e2e4659
  typedef struct _GdkCursor GdkCursor;
  typedef struct _GdkEventMotion GdkEventMotion;
  
 -#if 0
++// Note: NetRadiantCustom disables them but we still make use of them.
++#if 1
  GdkCursor* create_blank_cursor();
 +void set_cursor( ui::Widget widget, GdkCursorType cursor_type );
  void blank_cursor( ui::Widget widget );
  void default_cursor( ui::Widget widget );
 -void Sys_GetCursorPos( ui::Window window, int *x, int *y );
 -void Sys_SetCursorPos( ui::Window window, int x, int y );
 -
 -
+ #endif
 +void Sys_GetCursorPos( ui::Widget widget, int *x, int *y );
 +void Sys_SetCursorPos( ui::Widget widget, int x, int y );
  
  class DeferredMotion
  {
@@@ -107,7 -109,8 +110,7 @@@ void motion_delta( int x, int y, unsign
  class FreezePointer
  {
  unsigned int handle_motion;
- int recorded_x, recorded_y, last_x, last_y;
+ int recorded_x, recorded_y, last_x, last_y, center_x, center_y;
 -GtkWidget* weedjet;
  typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data );
  MotionDeltaFunction m_function;
  void* m_data;
index c17a984dc845b2af5b295cedb5f0a7eb7165e610,c96ee2f92cf97d1e0feec4bcd838b85e9249bf70..ee6634e6ea4dad5f6f5efa1e055eda0583fd8c48
@@@ -1324,7 -1319,7 +1324,9 @@@ void CamWnd::EnableFreeMove()
  
        gtk_window_set_focus( m_parent, m_gl_widget );
        m_freemove_handle_focusout = m_gl_widget.connect( "focus_out_event", G_CALLBACK( camwindow_freemove_focusout ), this );
 -      m_freezePointer.freeze_pointer( m_parent, m_gl_widget, Camera_motionDelta, &m_Camera );
++      /* Note: We chose to replace m_parent by m_gl_widget but NetRadiantCustom does:
++      m_freezePointer.freeze_pointer( m_parent, m_gl_widget, Camera_motionDelta, &m_Camera ); */
 +      m_freezePointer.freeze_pointer( m_gl_widget, Camera_motionDelta, &m_Camera );
  
        CamWnd_Update( *this );
  }
Simple merge
index e377c52386b18e26a6da9d533743837603bf1749,0141220bb7231c7adc0d8be9f26e423c96cd55f3..689d797d934c3111423b1fd46367c6195d99df32
@@@ -3270,62 -3192,14 +3270,62 @@@ void MainFrame::Create()
                vbox.pack_start( split, TRUE, TRUE, 0 );
  
                {
-             auto frame = create_framed_widget( TextureBrowser_constructWindow( window ) );
+             auto frame = create_framed_widget( TextureBrowser_constructWindow( GroupDialog_getWindow() ) );
                        g_page_textures = GroupDialog_addPage( "Textures", frame, TextureBrowserExportTitleCaller() );
 -#ifndef GARUX_GTK_WORKAROUND
 -                      /* workaround for gtk 2.24 issue: not displayed glwidget after toggle */
 -                      g_object_set_data( G_OBJECT( GroupDialog_getWindow() ), "glwidget", TextureBrowser_getGLWidget() );
 -#endif
 +
 +                      WORKAROUND_GOBJECT_SET_GLWIDGET( window, TextureBrowser_getGLWidget() );
                }
        }
 +      else // single window
 +      {
 +              m_pCamWnd = NewCamWnd();
 +              GlobalCamera_setCamWnd( *m_pCamWnd );
 +              CamWnd_setParent( *m_pCamWnd, window );
 +
 +              ui::Widget camera = CamWnd_getWidget( *m_pCamWnd );
 +
 +              m_pYZWnd = new XYWnd();
 +              m_pYZWnd->SetViewType( YZ );
 +
 +              ui::Widget yz = m_pYZWnd->GetWidget();
 +
 +              m_pXYWnd = new XYWnd();
 +              m_pXYWnd->SetViewType( XY );
 +
 +              ui::Widget xy = m_pXYWnd->GetWidget();
 +
 +              m_pXZWnd = new XYWnd();
 +              m_pXZWnd->SetViewType( XZ );
 +
 +              ui::Widget xz = m_pXZWnd->GetWidget();
 +
 +              ui::Widget hsplit = ui::HPaned(ui::New);
 +              vbox.pack_start( hsplit, TRUE, TRUE, 0 );
 +              hsplit.show();
 +
 +              ui::Widget split = create_split_views( camera, yz, xy, xz );
 +
 +              ui::Widget vsplit = ui::VPaned(ui::New);
 +              vsplit.show();
 +
 +              // textures
 +              ui::Widget texture_window = create_framed_widget( TextureBrowser_constructWindow( window ) );
 +
 +              // console
 +              ui::Widget console_window = create_framed_widget( Console_constructWindow( window ) );
 +
 +              gtk_paned_add1( GTK_PANED( hsplit ), split );
 +              gtk_paned_add2( GTK_PANED( hsplit ), vsplit );
 +
 +              gtk_paned_add1( GTK_PANED( vsplit ), texture_window  );
 +              gtk_paned_add2( GTK_PANED( vsplit ), console_window  );
 +
 +              hsplit.connect( "size_allocate", G_CALLBACK( hpaned_allocate ), &g_single_hpaned );
 +              hsplit.connect( "notify::position", G_CALLBACK( paned_position ), &g_single_hpaned );
 +
 +              vsplit.connect( "size_allocate", G_CALLBACK( vpaned_allocate ), &g_single_vpaned );
 +              vsplit.connect( "notify::position", G_CALLBACK( paned_position ), &g_single_vpaned );
 +      }
  
        EntityList_constructWindow( window );
        PreferencesDialog_constructWindow( window );
index 96fe13c2e347d0e7b67e24eddd886bea73edf203,6f9205953d4bde22ae4c687834f39d0bdeaf9b26..27baf5edb10f821989663c7634ccc2fc8ee23226
@@@ -1212,14 -1121,19 +1174,24 @@@ void TextureBrowser_trackingDelta( int 
        }
  }
  
- void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
-       textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser );
- }
  void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){
 -      textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent );
+       textureBrowser.m_move_started = false;
++      /* Note: NetRadiantCustom did this instead:
++      textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_gl_widget ); */
++
 +      textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_gl_widget );
  }
  
 -      textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &textureBrowser );
+ void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
+       if( textureBrowser.m_move_started ){
+               TextureBrowser_Tracking_MouseUp( textureBrowser );
+       }
+       textureBrowser.m_move_started = true;
++      /* Note: NetRadiantCustom did this instead:
++      textureBrowser.m_freezePointer.freeze_pointer( textureBrowser.m_parent, textureBrowser.m_gl_widget, TextureBrowser_trackingDelta, &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 );
  }
index 3470f861b0834c25f984a62caf646eb0461cea7c,ae99174bf856d3ee5a659ca8f46d1083cb6a12cf..4c07a7fefb03eade4f3210a18df0ab08b57d3062
@@@ -824,8 -820,7 +824,8 @@@ XYWnd::XYWnd() 
        m_parent( ui::null ),
        m_window_observer( NewWindowObserver() ),
        m_XORRectangle( m_gl_widget ),
-       m_chasemouse_handler( 0 ) {
+       m_chasemouse_handler( 0 ){
 +
        m_bActive = false;
        m_buttonstate = 0;
  
@@@ -1099,11 -1094,11 +1099,11 @@@ void entitycreate_activated( ui::Widge
                g_pParentWnd->ActiveXY()->OnEntityCreate( entity_name );
        }
        else {
 -              GlobalRadiant().m_pfnMessageBox( MainFrame_getWindow(), "There's already a worldspawn in your map!"
 -                                                                                                                                                        "",
 +              GlobalRadiant().m_pfnMessageBox( MainFrame_getWindow(),
 +                      "There's already a worldspawn in your map!",
-                       "Info",
-                       eMB_OK,
-                       eMB_ICONDEFAULT );
+                                                                                "Info",
+                                                                                eMB_OK,
+                                                                                eMB_ICONDEFAULT );
        }
  }
  
@@@ -1215,7 -1210,7 +1215,9 @@@ void XYWnd::Move_Begin()
                Move_End();
        }
        m_move_started = true;
 -      g_xywnd_freezePointer.freeze_pointer( m_parent  ? m_parent : MainFrame_getWindow(), m_gl_widget, XYWnd_moveDelta, this );
++      /* Note: NetRadiantCustom did this instead:
++      g_xywnd_freezePointer.freeze_pointer( m_parent  ? m_parent : MainFrame_getWindow(), m_gl_widget, XYWnd_moveDelta, this ); */
 +      g_xywnd_freezePointer.freeze_pointer( m_gl_widget, XYWnd_moveDelta, this );
        m_move_focusOut = m_gl_widget.connect( "focus_out_event", G_CALLBACK( XYWnd_Move_focusOut ), this );
  }
  
@@@ -1260,7 -1255,7 +1262,9 @@@ void XYWnd::Zoom_Begin()
        }
        m_zoom_started = true;
        g_dragZoom = 0;
 -      g_xywnd_freezePointer.freeze_pointer( m_parent ? m_parent : MainFrame_getWindow(), m_gl_widget, XYWnd_zoomDelta, this );
++      /* Note: NetRadiantCustom did this instead:
++      g_xywnd_freezePointer.freeze_pointer( m_parent ? m_parent : MainFrame_getWindow(), m_gl_widget, XYWnd_zoomDelta, this ); */
 +      g_xywnd_freezePointer.freeze_pointer( m_parent ? m_parent : MainFrame_getWindow(), XYWnd_zoomDelta, this );
        m_zoom_focusOut = m_gl_widget.connect( "focus_out_event", G_CALLBACK( XYWnd_Zoom_focusOut ), this );
  }