From a764616a9c1b2f9148e3381f808b600c512592c9 Mon Sep 17 00:00:00 2001 From: Thomas Debesse Date: Mon, 25 May 2020 17:43:13 +0200 Subject: [PATCH] fix merge --- libs/gtkutil/cursor.cpp | 36 +++++++++++++++++++++++++---------- libs/gtkutil/cursor.h | 4 ++-- radiant/entityinspector.cpp | 2 +- radiant/findtexturedialog.cpp | 2 +- 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/libs/gtkutil/cursor.cpp b/libs/gtkutil/cursor.cpp index 70a0856b..48a00187 100644 --- a/libs/gtkutil/cursor.cpp +++ b/libs/gtkutil/cursor.cpp @@ -66,14 +66,14 @@ gboolean FreezePointer::motion_delta(ui::Window widget, GdkEventMotion *event, F Sys_GetCursorPos( widget, ¤t_x, ¤t_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, ¢er_x, ¢er_y ); - Sys_SetCursorPos( window, recorded_x, recorded_y ); + /* using center for tracking for max safety */ + gdk_window_get_origin( GTK_WIDGET( widget )->window, ¢er_x, ¢er_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 ); } diff --git a/libs/gtkutil/cursor.h b/libs/gtkutil/cursor.h index 3b873db4..81767d2e 100644 --- a/libs/gtkutil/cursor.h +++ b/libs/gtkutil/cursor.h @@ -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 ); }; diff --git a/radiant/entityinspector.cpp b/radiant/entityinspector.cpp index 1864e7c8..0ae57f60 100644 --- a/radiant/entityinspector.cpp +++ b/radiant/entityinspector.cpp @@ -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 ) ); diff --git a/radiant/findtexturedialog.cpp b/radiant/findtexturedialog.cpp index b3425d57..d9811d3e 100644 --- a/radiant/findtexturedialog.cpp +++ b/radiant/findtexturedialog.cpp @@ -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( g_FindTextureDialog.m_position_tracker ) ); } void FindTextureDialog_Destroy(){ -- 2.39.2