From 2cd8c83f80e09597bfbe5482c74e0806be700739 Mon Sep 17 00:00:00 2001 From: mattias Date: Thu, 10 May 2012 14:58:41 +0000 Subject: [PATCH] gtk2: debugging for liboverlay grab_add/current problem git-svn-id: trunk@37243 - --- lcl/interfaces/gtk2/gtk2extrah.inc | 2 ++ lcl/interfaces/gtk2/gtk2winapi.inc | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/lcl/interfaces/gtk2/gtk2extrah.inc b/lcl/interfaces/gtk2/gtk2extrah.inc index c4181aabf6..a579f2f1fd 100644 --- a/lcl/interfaces/gtk2/gtk2extrah.inc +++ b/lcl/interfaces/gtk2/gtk2extrah.inc @@ -240,6 +240,8 @@ function gtk_icon_view_get_visible_range(tree_view: PGtkTreeView; out start_path procedure gtk_tree_view_column_queue_resize(tree_column: PGtkTreeViewColumn); cdecl; external gtklib; {$endif} +const + GDK_WINDOW_OFFSCREEN_lcl = 6; // ToDo: move to fpc {$ifdef GTK_2_10} function gdk_screen_is_composited(screen: PGdkScreen): gboolean; cdecl; external gdklib; {$endif} diff --git a/lcl/interfaces/gtk2/gtk2winapi.inc b/lcl/interfaces/gtk2/gtk2winapi.inc index a2638affa9..20cc251cbc 100644 --- a/lcl/interfaces/gtk2/gtk2winapi.inc +++ b/lcl/interfaces/gtk2/gtk2winapi.inc @@ -8276,6 +8276,9 @@ function TGtk2WidgetSet.SetCapture(AHandle: HWND): HWND; var Widget: PGtkWidget; CaptureWidget: PGtkWidget; + {$IfDef VerboseMouseCapture} + toplevel: PGtkWidget; + {$EndIf} begin Widget := {%H-}PGtkWidget(AHandle); {$IfDef VerboseMouseCapture} @@ -8321,11 +8324,22 @@ begin {$EndIf} {$IfDef VerboseMouseCapture} - DebugLn('TGtk2WidgetSet.SetCapture gtk_grab_add=[',GetWidgetDebugReport(CaptureWidget),']'); + DebugLn(['TGtk2WidgetSet.SetCapture gtk_grab_add=[',GetWidgetDebugReport(CaptureWidget),'] has_grab=',gtk_widget_has_grab(CaptureWidget),' is_sensitive=',gtk_widget_is_sensitive(CaptureWidget)]); + toplevel := gtk_widget_get_toplevel(CaptureWidget); + if (toplevel<>nil) + and (ord(gdk_window_get_window_type (toplevel^.window)) = GDK_WINDOW_OFFSCREEN_lcl) + then begin + debugln(['WARNING: TGtk2WidgetSet.SetCapture capturewidget is offscreen']); + end; + // Note: liboverlay: gtk_grab_add sets gtk_widget_has_grab, but gtk_grab_get_current returns nil + // ToDo: check window group {$EndIf} gtk_grab_add(CaptureWidget); {$IfDef VerboseMouseCapture} - DebugLn('TGtk2WidgetSet.SetCapture gtk=[',GetWidgetDebugReport(gtk_grab_get_current),']'); + if gtk_grab_get_current=CaptureWidget then + DebugLn('TGtk2WidgetSet.SetCapture success gtk_grab_get_current=[',GetWidgetDebugReport(gtk_grab_get_current),']') + else + DebugLn('WARNING: TGtk2WidgetSet.SetCapture failed gtk_grab_get_current=[',GetWidgetDebugReport(gtk_grab_get_current),']'); {$EndIf} MouseCaptureWidget := CaptureWidget;