diff options
| author | Alexei Sorokin <[email protected]> | 2017-03-18 22:17:36 +0300 | 
|---|---|---|
| committer | Alexei Sorokin <[email protected]> | 2017-03-18 22:17:36 +0300 | 
| commit | 889f0f2336640314d966dfe9c02d74169c255d5c (patch) | |
| tree | 6d9882d75628cc164d94dfdd958a5d86030365f7 | |
| parent | 280c1746b557369793e41f39e1d6b5edb1a1bf2b (diff) | |
| download | mate-settings-daemon-889f0f2336640314d966dfe9c02d74169c255d5c.tar.bz2 mate-settings-daemon-889f0f2336640314d966dfe9c02d74169c255d5c.tar.xz | |
mouse: More pointer locater refactoring
| -rw-r--r-- | plugins/mouse/msd-locate-pointer.c | 110 | 
1 files changed, 55 insertions, 55 deletions
| diff --git a/plugins/mouse/msd-locate-pointer.c b/plugins/mouse/msd-locate-pointer.c index 4cddd97..b2ccbf0 100644 --- a/plugins/mouse/msd-locate-pointer.c +++ b/plugins/mouse/msd-locate-pointer.c @@ -190,7 +190,7 @@ timeline_frame_cb (MsdTimeline *timeline,      {        /* only invalidate window each circle interval */        update_shape (data); -      gdk_window_invalidate_rect (data->window, NULL, FALSE); +      gtk_widget_queue_draw (GTK_WIDGET (data->widget));        data->progress += CIRCLES_PROGRESS_INTERVAL;      } @@ -267,7 +267,9 @@ timeline_finished_cb (MsdTimeline *timeline,    /* set transparent shape and hide window */    if (!gdk_screen_is_composited (screen)) -    set_transparent_shape (data->window); +    { +      set_transparent_shape (data->window); +    }    gtk_widget_hide (GTK_WIDGET (data->widget));  } @@ -333,7 +335,7 @@ locate_pointer_draw_cb (GtkWidget      *widget,                          gpointer        user_data)  {    MsdLocatePointerData *data = (MsdLocatePointerData *) user_data; -  GdkScreen *screen = gtk_window_get_screen (data->widget); +  GdkScreen *screen = gdk_window_get_screen (data->window);    if (gtk_cairo_should_draw_window (cr, data->window))      { @@ -344,15 +346,12 @@ locate_pointer_draw_cb (GtkWidget      *widget,  }  static MsdLocatePointerData * -msd_locate_pointer_data_new (GdkDisplay *display) +msd_locate_pointer_data_new (void)  {    MsdLocatePointerData *data;    data = g_new0 (MsdLocatePointerData, 1); -  /* this widget will never be shown, it's -   * mainly used to get signals/events from -   */    data->widget = GTK_WINDOW (gtk_window_new (GTK_WINDOW_POPUP));    g_signal_connect (GTK_WIDGET (data->widget), "unrealize", @@ -418,8 +417,7 @@ move_locate_pointer_window (MsdLocatePointerData *data,    cr = cairo_create (mask);    cairo_set_source_rgba (cr, 0., 0., 0., 0.); -  cairo_rectangle (cr, 0., 0., WINDOW_SIZE, WINDOW_SIZE); -  cairo_fill (cr); +  cairo_paint (cr);    region = gdk_cairo_region_create_from_surface (mask); @@ -437,7 +435,7 @@ msd_locate_pointer (GdkDisplay *display)    if (data == NULL)      { -      data = msd_locate_pointer_data_new (display); +      data = msd_locate_pointer_data_new ();      }    msd_timeline_pause (data->timeline); @@ -461,49 +459,50 @@ msd_locate_pointer (GdkDisplay *display)  /* Owen magic */  static GdkFilterReturn -filter (GdkXEvent *xevent, -        GdkEvent  *event, -        gpointer   data) +event_filter (GdkXEvent *gdkxevent, +              GdkEvent  *event, +              gpointer   user_data)  { -  XEvent *xev = (XEvent *) xevent; -  guint keyval; -  gint group; +  XEvent *xevent = (XEvent *) gdkxevent; +  GdkDisplay *display = (GdkDisplay *) user_data; -  GdkDisplay *display = (GdkDisplay *) data; - -  if (xev->type == KeyPress || xev->type == KeyRelease) +  if (xevent->xany.type == KeyPress || xevent->xany.type == KeyRelease)      { +      guint keyval; +      gint group; +        /* get the keysym */ -      group = (xev->xkey.state & KEYBOARD_GROUP_MASK) >> KEYBOARD_GROUP_SHIFT; -      gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (), -                                           xev->xkey.keycode, -                                           xev->xkey.state, +      group = (xevent->xkey.state & KEYBOARD_GROUP_MASK) >> KEYBOARD_GROUP_SHIFT; +      gdk_keymap_translate_keyboard_state (gdk_keymap_get_for_display (display), +                                           xevent->xkey.keycode, +                                           xevent->xkey.state,                                             group,                                             &keyval,                                             NULL, NULL, NULL); +        if (keyval == GDK_KEY_Control_L || keyval == GDK_KEY_Control_R)          { -          if (xev->type == KeyPress) -            { -              XAllowEvents (xev->xkey.display, -                            SyncKeyboard, -                            xev->xkey.time); +          if (xevent->xany.type == KeyRelease) +            {  +              XAllowEvents (xevent->xany.display, +                            AsyncKeyboard, +                            xevent->xkey.time); +              msd_locate_pointer (display);              }            else              { -              XAllowEvents (xev->xkey.display, -                            AsyncKeyboard, -                            xev->xkey.time); -              msd_locate_pointer (display); +              XAllowEvents (xevent->xany.display, +                            SyncKeyboard, +                            xevent->xkey.time);              }          }        else          { -          XAllowEvents (xev->xkey.display, +          XAllowEvents (xevent->xany.display,                          ReplayKeyboard, -                        xev->xkey.time); -          XUngrabKeyboard (GDK_DISPLAY_XDISPLAY (display), -                           xev->xkey.time); +                        xevent->xkey.time); +          XUngrabKeyboard (xevent->xany.display, +                           xevent->xkey.time);          }      } @@ -517,65 +516,66 @@ set_locate_pointer (void)    GdkDisplay *display;    GdkScreen *screen;    int n_keys; -  gboolean has_entries; +  gboolean has_entries = FALSE;    static const guint keyvals[] = { GDK_KEY_Control_L, GDK_KEY_Control_R }; -  unsigned int j; +  unsigned int i, j;    display = gdk_display_get_default ();    screen = gdk_display_get_default_screen (display); -  for (j = 0 ; j < G_N_ELEMENTS (keyvals) ; j++) +  for (i = 0; i < G_N_ELEMENTS (keyvals); ++i)      { -      has_entries = gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), -                                                       keyvals[j], -                                                       &keys, -                                                       &n_keys); -      if (has_entries) +      if (gdk_keymap_get_entries_for_keyval (gdk_keymap_get_for_display (display), +                                             keyvals[i], +                                             &keys, +                                             &n_keys))          { -          gint i; -          for (i = 0; i < n_keys; i++) +          has_entries = TRUE; +          for (j = 0; j < n_keys; ++j)              {                Window xroot;                xroot = GDK_WINDOW_XID (gdk_screen_get_root_window (screen));                XGrabKey (GDK_DISPLAY_XDISPLAY (display), -                        keys[i].keycode, +                        keys[j].keycode,                          0,                          xroot,                          False,                          GrabModeAsync,                          GrabModeSync);                XGrabKey (GDK_DISPLAY_XDISPLAY (display), -                        keys[i].keycode, +                        keys[j].keycode,                          LockMask,                          xroot,                          False,                          GrabModeAsync,                          GrabModeSync);                XGrabKey (GDK_DISPLAY_XDISPLAY (display), -                        keys[i].keycode, +                        keys[j].keycode,                          Mod2Mask,                          xroot,                          False,                          GrabModeAsync,                          GrabModeSync);                XGrabKey (GDK_DISPLAY_XDISPLAY (display), -                        keys[i].keycode, +                        keys[j].keycode,                          Mod4Mask,                          xroot,                          False,                          GrabModeAsync,                          GrabModeSync);              } -            g_free (keys); - -          gdk_window_add_filter (gdk_screen_get_root_window (screen), -                                 filter, -                                 display);          }      } + +  if (has_entries) +    { +      gdk_window_add_filter (gdk_screen_get_root_window (screen), +                             (GdkFilterFunc) event_filter, +                             display); +    }  } | 
