diff mbox

[v2,1/4] gtk: Use gtk generic event signal instead of motion-notify-event

Message ID 1396441953-19260-2-git-send-email-tiwai@suse.de
State New
Headers show

Commit Message

Takashi Iwai April 2, 2014, 12:32 p.m. UTC
The GDK motion-notify-event isn't generated when the pointer goes out
of the target window even if the pointer is grabbed, which essentially
means to lose the pointer tracking in gtk-ui.

Meanwhile the generic "event" signal is sent when the pointer is
grabbed, so we can use this and pick the motion notify events manually
there instead.

Reference: https://bugzilla.novell.com/show_bug.cgi?id=849587
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 ui/gtk.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

Comments

Cole Robinson April 2, 2014, 1:25 p.m. UTC | #1
On 04/02/2014 08:32 AM, Takashi Iwai wrote:
> The GDK motion-notify-event isn't generated when the pointer goes out
> of the target window even if the pointer is grabbed, which essentially
> means to lose the pointer tracking in gtk-ui.
> 
> Meanwhile the generic "event" signal is sent when the pointer is
> grabbed, so we can use this and pick the motion notify events manually
> there instead.
> 
> Reference: https://bugzilla.novell.com/show_bug.cgi?id=849587
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>  ui/gtk.c | 11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/ui/gtk.c b/ui/gtk.c
> index f056e4034b3e..54b835428a28 100644
> --- a/ui/gtk.c
> +++ b/ui/gtk.c
> @@ -765,6 +765,13 @@ static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
>      return TRUE;
>  }
>  
> +static gboolean gd_event(GtkWidget *widget, GdkEvent *event, void *opaque)
> +{
> +    if (event->type == GDK_MOTION_NOTIFY)
> +        return gd_motion_event(widget, &event->motion, opaque);
> +    return FALSE;
> +}
> +
>  /** Window Menu Actions **/
>  
>  static void gd_menu_pause(GtkMenuItem *item, void *opaque)
> @@ -1267,8 +1274,8 @@ static void gd_connect_signals(GtkDisplayState *s)
>      g_signal_connect(s->drawing_area, "expose-event",
>                       G_CALLBACK(gd_expose_event), s);
>  #endif
> -    g_signal_connect(s->drawing_area, "motion-notify-event",
> -                     G_CALLBACK(gd_motion_event), s);
> +    g_signal_connect(s->drawing_area, "event",
> +                     G_CALLBACK(gd_event), s);
>      g_signal_connect(s->drawing_area, "button-press-event",
>                       G_CALLBACK(gd_button_event), s);
>      g_signal_connect(s->drawing_area, "button-release-event",
> 

Tested-by: Cole Robinson <crobinso@redhat.com>
Reviewed-by: Cole Robinson <crobinso@redhat.com>

Thanks,
Cole
Gerd Hoffmann April 2, 2014, 3:17 p.m. UTC | #2
On Mi, 2014-04-02 at 14:32 +0200, Takashi Iwai wrote:
> +static gboolean gd_event(GtkWidget *widget, GdkEvent *event, void
> *opaque)
> +{
> +    if (event->type == GDK_MOTION_NOTIFY)
> +        return gd_motion_event(widget, &event->motion, opaque);
> +    return FALSE;
> +}

Fails checkpatch:

WARNING: braces {} are necessary for all arms of this statement
#12: FILE: ui/gtk.c:771:
+    if (event->type == GDK_MOTION_NOTIFY)
[...]

total: 0 errors, 1 warnings, 23 lines checked

cheers,
  Gerd
Takashi Iwai April 2, 2014, 3:26 p.m. UTC | #3
At Wed, 02 Apr 2014 17:17:54 +0200,
Gerd Hoffmann wrote:
> 
> On Mi, 2014-04-02 at 14:32 +0200, Takashi Iwai wrote:
> > +static gboolean gd_event(GtkWidget *widget, GdkEvent *event, void
> > *opaque)
> > +{
> > +    if (event->type == GDK_MOTION_NOTIFY)
> > +        return gd_motion_event(widget, &event->motion, opaque);
> > +    return FALSE;
> > +}
> 
> Fails checkpatch:
> 
> WARNING: braces {} are necessary for all arms of this statement
> #12: FILE: ui/gtk.c:771:
> +    if (event->type == GDK_MOTION_NOTIFY)
> [...]
> 
> total: 0 errors, 1 warnings, 23 lines checked

OK, you guys have a different checkpatch bible than the kernel tree :)
I'll tidy up later, if the patch is really acceptable.


thanks,

Takashi
diff mbox

Patch

diff --git a/ui/gtk.c b/ui/gtk.c
index f056e4034b3e..54b835428a28 100644
--- a/ui/gtk.c
+++ b/ui/gtk.c
@@ -765,6 +765,13 @@  static gboolean gd_key_event(GtkWidget *widget, GdkEventKey *key, void *opaque)
     return TRUE;
 }
 
+static gboolean gd_event(GtkWidget *widget, GdkEvent *event, void *opaque)
+{
+    if (event->type == GDK_MOTION_NOTIFY)
+        return gd_motion_event(widget, &event->motion, opaque);
+    return FALSE;
+}
+
 /** Window Menu Actions **/
 
 static void gd_menu_pause(GtkMenuItem *item, void *opaque)
@@ -1267,8 +1274,8 @@  static void gd_connect_signals(GtkDisplayState *s)
     g_signal_connect(s->drawing_area, "expose-event",
                      G_CALLBACK(gd_expose_event), s);
 #endif
-    g_signal_connect(s->drawing_area, "motion-notify-event",
-                     G_CALLBACK(gd_motion_event), s);
+    g_signal_connect(s->drawing_area, "event",
+                     G_CALLBACK(gd_event), s);
     g_signal_connect(s->drawing_area, "button-press-event",
                      G_CALLBACK(gd_button_event), s);
     g_signal_connect(s->drawing_area, "button-release-event",