[gtk/shortcuts-rebased-again] shortcut controller: Factor out a helper



commit 7d7ca945bfbf6885ef2f8e1b9978a928adaabd5c
Author: Matthias Clasen <mclasen redhat com>
Date:   Wed Jun 19 11:11:07 2019 -0400

    shortcut controller: Factor out a helper
    
    No need to have the same code in multiple places.

 gtk/gtkshortcutcontroller.c | 93 +++++++++++++++++++--------------------------
 1 file changed, 39 insertions(+), 54 deletions(-)
---
diff --git a/gtk/gtkshortcutcontroller.c b/gtk/gtkshortcutcontroller.c
index 7368074021..028f52cda7 100644
--- a/gtk/gtkshortcutcontroller.c
+++ b/gtk/gtkshortcutcontroller.c
@@ -148,6 +148,37 @@ gtk_shortcut_controller_is_rooted (GtkShortcutController *self)
   return gtk_widget_get_root (widget) != NULL;
 }
 
+static GtkShortcutManager *
+gtk_shortcut_controller_get_manager (GtkShortcutController *self)
+{
+  switch (self->scope)
+    {
+    case GTK_SHORTCUT_SCOPE_LOCAL:
+      return NULL;
+
+    case GTK_SHORTCUT_SCOPE_MANAGED:
+      {
+        GtkWidget *widget;
+        
+        for (widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self));
+             !GTK_IS_SHORTCUT_MANAGER (widget);
+             widget = _gtk_widget_get_parent (widget));
+          return GTK_SHORTCUT_MANAGER (widget);
+      }
+      break;
+
+    case GTK_SHORTCUT_SCOPE_GLOBAL:
+      return GTK_SHORTCUT_MANAGER (gtk_widget_get_root (gtk_event_controller_get_widget 
(GTK_EVENT_CONTROLLER (self))));
+      break;
+
+    default:
+      g_assert_not_reached ();
+      return;
+    }
+
+  return NULL;
+}
+
 static void
 gtk_shortcut_controller_set_property (GObject      *object,
                                       guint         prop_id,
@@ -357,6 +388,8 @@ gtk_shortcut_controller_set_widget (GtkEventController *controller,
 
   if (_gtk_widget_get_root (widget))
     gtk_shortcut_controller_root (self);
+
+  update_primary_accels (self, widget);
 }
 
 static void
@@ -436,67 +469,19 @@ gtk_shortcut_controller_init (GtkShortcutController *self)
 void
 gtk_shortcut_controller_root (GtkShortcutController *self)
 {
-  GtkShortcutManager *manager;
-
-  switch (self->scope)
-    {
-    case GTK_SHORTCUT_SCOPE_LOCAL:
-      return;
-
-    case GTK_SHORTCUT_SCOPE_MANAGED:
-      {
-        GtkWidget *widget;
-        
-        for (widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self));
-             !GTK_IS_SHORTCUT_MANAGER (widget);
-             widget = _gtk_widget_get_parent (widget));
-        manager = GTK_SHORTCUT_MANAGER (widget);
-      }
-      break;
-
-    case GTK_SHORTCUT_SCOPE_GLOBAL:
-      manager = GTK_SHORTCUT_MANAGER (gtk_widget_get_root (gtk_event_controller_get_widget 
(GTK_EVENT_CONTROLLER (self))));
-      break;
-
-    default:
-      g_assert_not_reached ();
-      return;
-    }
+  GtkShortcutManager *manager = get_shortcut_controller_get_manager (self);
 
-  GTK_SHORTCUT_MANAGER_GET_IFACE (manager)->add_controller (manager, self);
+  if (manager)
+    GTK_SHORTCUT_MANAGER_GET_IFACE (manager)->add_controller (manager, self);
 }
 
 void
 gtk_shortcut_controller_unroot (GtkShortcutController *self)
 {
-  GtkShortcutManager *manager;
-
-  switch (self->scope)
-    {
-    case GTK_SHORTCUT_SCOPE_LOCAL:
-      return;
-
-    case GTK_SHORTCUT_SCOPE_MANAGED:
-      {
-        GtkWidget *widget;
-        
-        for (widget = gtk_event_controller_get_widget (GTK_EVENT_CONTROLLER (self));
-             !GTK_IS_SHORTCUT_MANAGER (widget);
-             widget = _gtk_widget_get_parent (widget));
-        manager = GTK_SHORTCUT_MANAGER (widget);
-      }
-      break;
-
-    case GTK_SHORTCUT_SCOPE_GLOBAL:
-      manager = GTK_SHORTCUT_MANAGER (gtk_widget_get_root (gtk_event_controller_get_widget 
(GTK_EVENT_CONTROLLER (self))));
-      break;
-
-    default:
-      g_assert_not_reached ();
-      return;
-    }
+  GtkShortcutManager *manager = get_shortcut_controller_get_manager (self);
 
-  GTK_SHORTCUT_MANAGER_GET_IFACE (manager)->remove_controller (manager, self);
+  if (manager)
+    GTK_SHORTCUT_MANAGER_GET_IFACE (manager)->remove_controller (manager, self);
 }
 
 GtkEventController *


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]