]> git.xonotic.org Git - xonotic/netradiant.git/commitdiff
fix merge
authorThomas Debesse <dev@illwieckz.net>
Mon, 25 May 2020 15:43:13 +0000 (17:43 +0200)
committerThomas Debesse <dev@illwieckz.net>
Mon, 25 May 2020 15:43:13 +0000 (17:43 +0200)
libs/gtkutil/cursor.cpp
libs/gtkutil/cursor.h
radiant/entityinspector.cpp
radiant/findtexturedialog.cpp

index 70a0856b68ea9af66e3fbdcbf287825bce8b677e..48a0018746232769596ae7c73814e7ef7ad96c77 100644 (file)
@@ -66,14 +66,14 @@ gboolean FreezePointer::motion_delta(ui::Window widget, GdkEventMotion *event, F
        Sys_GetCursorPos( widget, &current_x, &current_y );
        int dx = current_x - self->last_x;
        int dy = current_y - self->last_y;
-       int ddx = current_x - self->recorded_x;
-       int ddy = current_y - self->recorded_y;
+       int ddx = current_x - self->center_x;
+       int ddy = current_y - self->center_y;
        self->last_x = current_x;
        self->last_y = current_y;
        if ( dx != 0 || dy != 0 ) {
                //globalOutputStream() << "motion x: " << dx << ", y: " << dy << "\n";
                if (ddx < -32 || ddx > 32 || ddy < -32 || ddy > 32) {
-                       Sys_SetCursorPos( widget, self->recorded_x, self->recorded_y );
+                       Sys_SetCursorPos( widget, self->center_x, self->center_y );
                        self->last_x = self->recorded_x;
                        self->last_y = self->recorded_y;
                }
@@ -82,7 +82,7 @@ gboolean FreezePointer::motion_delta(ui::Window widget, GdkEventMotion *event, F
        return FALSE;
 }
 
-void FreezePointer::freeze_pointer(ui::Window window, FreezePointer::MotionDeltaFunction function, void *data)
+void FreezePointer::freeze_pointer(ui::Window window, ui::Widget widget, FreezePointer::MotionDeltaFunction function, void *data)
 {
        ASSERT_MESSAGE( m_function == 0, "can't freeze pointer" );
 
@@ -96,17 +96,31 @@ void FreezePointer::freeze_pointer(ui::Window window, FreezePointer::MotionDelta
                                                                                                                 | GDK_BUTTON_RELEASE_MASK
                                                                                                                 | GDK_VISIBILITY_NOTIFY_MASK );
 
-       GdkCursor* cursor = create_blank_cursor();
+       //GdkCursor* cursor = create_blank_cursor();
+       GdkCursor* cursor = gdk_cursor_new( GDK_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      */
        gdk_pointer_grab( gtk_widget_get_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 */
+       gtk_grab_add( widget );
+       weedjet = widget;
+
        gdk_cursor_unref( cursor );
 
-       Sys_GetCursorPos( window, &recorded_x, &recorded_y );
+       Sys_GetCursorPos( window, &center_x, &center_y );
 
-       Sys_SetCursorPos( window, recorded_x, recorded_y );
+       /*      using center for tracking for max safety        */
+       gdk_window_get_origin( GTK_WIDGET( widget )->window, &center_x, &center_y );
+       auto allocation = widget.dimensions();
+       center_y += allocation.height / 2;
+       center_x += allocation.width / 2;
 
-       last_x = recorded_x;
-       last_y = recorded_y;
+       Sys_SetCursorPos( window, center_x, center_y );
+
+       last_x = center_x;
+       last_y = center_y;
 
        m_function = function;
        m_data = data;
@@ -121,7 +135,9 @@ void FreezePointer::unfreeze_pointer(ui::Window window)
        m_function = 0;
        m_data = 0;
 
-       Sys_SetCursorPos( window, recorded_x, recorded_y );
+//     Sys_SetCursorPos( window, center_x, center_y );
 
        gdk_pointer_ungrab( GDK_CURRENT_TIME );
+
+       gtk_grab_remove( weedjet );
 }
index 3b873db4f92e88fffc0b1a8e087c51282148a1aa..81767d2e591900fa4b258c3b0d473c363c5ca022 100644 (file)
@@ -110,7 +110,7 @@ class FreezePointer
 {
 unsigned int handle_motion;
 int recorded_x, recorded_y, last_x, last_y, center_x, center_y;
-GtkWidget* weedjet;
+ui::Widget weedjet{ui::null};
 typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data );
 MotionDeltaFunction m_function;
 void* m_data;
@@ -119,7 +119,7 @@ FreezePointer() : handle_motion( 0 ), m_function( 0 ), m_data( 0 ){
 }
 static gboolean motion_delta( ui::Window widget, GdkEventMotion *event, FreezePointer* self );
 
-void freeze_pointer( ui::Window window, MotionDeltaFunction function, void* data );
+void freeze_pointer( ui::Window window, ui::Widget widget, MotionDeltaFunction function, void* data );
 
 void unfreeze_pointer( ui::Window window );
 };
index 1864e7c8d72231052d3e2fba71a156b11b31911b..0ae57f60ab268882fc9c6113af02f67466a51990 100644 (file)
@@ -1620,7 +1620,7 @@ EntityInspector g_EntityInspector;
 void EntityInspector_construct(){
        GlobalEntityClassManager().attach( g_EntityInspector );
 
-       GlobalPreferenceSystem().registerPreference( "EntitySplit0", IntImportStringCaller( g_entitysplit0_position ), IntExportStringCaller( g_entitysplit0_position ) );
+       GlobalPreferenceSystem().registerPreference( "EntitySplit0", make_property_string( g_entitysplit0_position ) );
        GlobalPreferenceSystem().registerPreference( "EntitySplit1", make_property_string( g_entitysplit1_position ) );
        GlobalPreferenceSystem().registerPreference( "EntitySplit2", make_property_string( g_entitysplit2_position ) );
 
index b3425d57f40f85a72c33d47354bf9953356c4ea5..d9811d3e48c6f58d2b1780fa31f50f23e47cc3d6 100644 (file)
@@ -261,7 +261,7 @@ void FindTextureDialog_selectTexture( const char* name ){
 
 void FindTextureDialog_Construct(){
        GlobalCommands_insert( "FindReplaceTextures", FindTextureDialog::ShowCaller() );
-       GlobalPreferenceSystem().registerPreference( "FindReplacehWnd", WindowPositionTrackerImportStringCaller( g_FindTextureDialog.m_position_tracker ), WindowPositionTrackerExportStringCaller( g_FindTextureDialog.m_position_tracker ) );
+       GlobalPreferenceSystem().registerPreference( "FindReplacehWnd",  make_property_string<WindowPositionTracker_String>( g_FindTextureDialog.m_position_tracker ) );
 }
 
 void FindTextureDialog_Destroy(){