[gthumb] fixed navigation buttons not hidden after a timeout sometimes
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] fixed navigation buttons not hidden after a timeout sometimes
- Date: Sun, 4 May 2014 08:59:23 +0000 (UTC)
commit c3b7070bc6277eb9a5fbdfe992d700a27af0bdba
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun May 4 10:56:43 2014 +0200
fixed navigation buttons not hidden after a timeout sometimes
call hide_mouse_pointer_after_delay after showing the viewer
gthumb/gth-browser.c | 42 +++++++++++++++++++++++++++++-------------
gthumb/gtk-utils.c | 18 ++++++++++++++++++
gthumb/gtk-utils.h | 1 +
3 files changed, 48 insertions(+), 13 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index a896d1e..6a3e0b0 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -2212,6 +2212,9 @@ _gth_browser_update_header_section_visibility (GthBrowser *browser,
}
+/* -- hide_mouse_pointer_after_delay -- */
+
+
typedef struct {
GthBrowser *browser;
GdkDevice *device;
@@ -2247,6 +2250,9 @@ pointer_on_control (HideMouseData *hmdata,
{
GList *scan;
+ if (hmdata->device == NULL)
+ return FALSE;
+
for (scan = controls; scan; scan = scan->next)
if (pointer_on_widget ((GtkWidget *) scan->data, hmdata->device))
return TRUE;
@@ -2281,13 +2287,32 @@ hide_mouse_pointer_cb (gpointer data)
}
+static void
+hide_mouse_pointer_after_delay (GthBrowser *browser,
+ GdkDevice *device)
+{
+ HideMouseData *hmdata;
+
+ if (browser->priv->hide_mouse_timeout != 0)
+ g_source_remove (browser->priv->hide_mouse_timeout);
+
+ hmdata = g_new0 (HideMouseData, 1);
+ hmdata->browser = browser;
+ hmdata->device = (device != NULL) ? device : _gtk_widget_get_client_pointer (GTK_WIDGET (browser));
+ browser->priv->hide_mouse_timeout = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
+ HIDE_MOUSE_DELAY,
+ hide_mouse_pointer_cb,
+ hmdata,
+ g_free);
+}
+
+
static gboolean
viewer_motion_notify_event_cb (GtkWidget *widget,
GdkEventMotion *event,
gpointer data)
{
- GthBrowser *browser = data;
- HideMouseData *hmdata;
+ GthBrowser *browser = data;
if (! pointer_on_widget (browser->priv->viewer_container, event->device))
return FALSE;
@@ -2309,17 +2334,7 @@ viewer_motion_notify_event_cb (GtkWidget *widget,
_gth_browser_show_pointer_on_viewer (browser, TRUE);
}
- if (browser->priv->hide_mouse_timeout != 0)
- g_source_remove (browser->priv->hide_mouse_timeout);
-
- hmdata = g_new0 (HideMouseData, 1);
- hmdata->browser = browser;
- hmdata->device = event->device;
- browser->priv->hide_mouse_timeout = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
- HIDE_MOUSE_DELAY,
- hide_mouse_pointer_cb,
- hmdata,
- g_free);
+ hide_mouse_pointer_after_delay (browser, event->device);
browser->priv->last_mouse_x = event->x;
browser->priv->last_mouse_y = event->y;
@@ -2352,6 +2367,7 @@ _gth_browser_real_set_current_page (GthWindow *window,
if (page == GTH_BROWSER_PAGE_VIEWER) {
gth_viewer_page_show (browser->priv->viewer_page);
_gth_browser_show_pointer_on_viewer (browser, FALSE);
+ hide_mouse_pointer_after_delay (browser, NULL);
browser->priv->last_mouse_x = 0.0;
browser->priv->last_mouse_y = 0.0;
diff --git a/gthumb/gtk-utils.c b/gthumb/gtk-utils.c
index ba5d9b0..d3363a5 100644
--- a/gthumb/gtk-utils.c
+++ b/gthumb/gtk-utils.c
@@ -1211,3 +1211,21 @@ _gtk_window_get_is_maximized (GtkWindow *window)
return (gdk_window_get_state (gdk_win) & GDK_WINDOW_STATE_MAXIMIZED) != 0;
}
+
+
+GdkDevice *
+_gtk_widget_get_client_pointer (GtkWidget *widget)
+{
+ GdkDisplay *display;
+ GdkDeviceManager *device_manager;
+
+ display = gtk_widget_get_display (widget);
+ if (display == NULL)
+ return NULL;
+
+ device_manager = gdk_display_get_device_manager (display);
+ if (device_manager == NULL)
+ return NULL;
+
+ return gdk_device_manager_get_client_pointer (device_manager);
+}
diff --git a/gthumb/gtk-utils.h b/gthumb/gtk-utils.h
index f1ef58b..ad11d38 100644
--- a/gthumb/gtk-utils.h
+++ b/gthumb/gtk-utils.h
@@ -145,6 +145,7 @@ void _gtk_window_add_accelerator_for_action (GtkWindow
*window,
void _gtk_window_add_accelerators_from_menu (GtkWindow *window,
GMenuModel *menu);
gboolean _gtk_window_get_is_maximized (GtkWindow *window);
+GdkDevice * _gtk_widget_get_client_pointer (GtkWidget *widget);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]