[gnome-builder] greeter: propagate selection mode



commit c1f6f81f1dbb5269ceea10c452cc192537719e81
Author: Christian Hergert <chergert redhat com>
Date:   Fri Nov 17 20:26:44 2017 -0800

    greeter: propagate selection mode
    
    This notifies the sections to enter selection mode, or exit
    selection mode. We still need the ability to notify of active
    selections and to perform an action, but that will happen in a
    future commit.

 src/libide/greeter/ide-greeter-perspective.c |   39 ++++++++++++++++++++++++++
 src/libide/greeter/ide-greeter-section.c     |   10 ++++++
 src/libide/greeter/ide-greeter-section.h     |   17 +++++++----
 3 files changed, 60 insertions(+), 6 deletions(-)
---
diff --git a/src/libide/greeter/ide-greeter-perspective.c b/src/libide/greeter/ide-greeter-perspective.c
index e2336b2..bfa763b 100644
--- a/src/libide/greeter/ide-greeter-perspective.c
+++ b/src/libide/greeter/ide-greeter-perspective.c
@@ -56,6 +56,7 @@ struct _IdeGreeterPerspective
   GtkInfoBar           *info_bar;
   GtkLabel             *info_bar_label;
   GtkRevealer          *info_bar_revealer;
+  GtkToggleButton      *selection_button;
   GtkViewport          *viewport;
   GtkWidget            *titlebar;
   GtkButton            *open_button;
@@ -1010,6 +1011,37 @@ delete_selected_rows (GSimpleAction *simple,
 }
 
 static void
+ide_greeter_perspective_notify_selection (PeasExtensionSet *set,
+                                          PeasPluginInfo   *plugin_info,
+                                          PeasExtension    *exten,
+                                          gpointer          user_data)
+{
+  IdeGreeterSection *section = (IdeGreeterSection *)exten;
+  gboolean *selection = user_data;
+
+  g_assert (IDE_IS_GREETER_SECTION (section));
+  g_assert (selection != NULL);
+
+  ide_greeter_section_set_selection_mode (section, *selection);
+}
+
+static void
+ide_greeter_perspective_selection_toggled (IdeGreeterPerspective *self,
+                                           GtkToggleButton       *button)
+{
+  gboolean selection;
+
+  g_assert (IDE_IS_GREETER_PERSPECTIVE (self));
+  g_assert (GTK_IS_TOGGLE_BUTTON (button));
+
+  selection = gtk_toggle_button_get_active (button);
+
+  peas_extension_set_foreach (self->sections,
+                              ide_greeter_perspective_notify_selection,
+                              &selection);
+}
+
+static void
 ide_greeter_perspective_destroy (GtkWidget *widget)
 {
   IdeGreeterPerspective *self = (IdeGreeterPerspective *)widget;
@@ -1061,6 +1093,7 @@ ide_greeter_perspective_class_init (IdeGreeterPerspectiveClass *klass)
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, scrolled_window);
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, search_entry);
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, sections_container);
+  gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, selection_button);
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, stack);
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, state_machine);
   gtk_widget_class_bind_template_child (widget_class, IdeGreeterPerspective, titlebar);
@@ -1085,6 +1118,12 @@ ide_greeter_perspective_init (IdeGreeterPerspective *self)
                     G_CALLBACK (gtk_widget_destroyed),
                     &self->titlebar);
 
+  g_signal_connect_object (self->selection_button,
+                           "toggled",
+                           G_CALLBACK (ide_greeter_perspective_selection_toggled),
+                           self,
+                           G_CONNECT_SWAPPED);
+
   g_signal_connect_object (self->search_entry,
                            "activate",
                            G_CALLBACK (ide_greeter_perspective__search_entry_activate),
diff --git a/src/libide/greeter/ide-greeter-section.c b/src/libide/greeter/ide-greeter-section.c
index c3644d2..dcd013e 100644
--- a/src/libide/greeter/ide-greeter-section.c
+++ b/src/libide/greeter/ide-greeter-section.c
@@ -133,3 +133,13 @@ ide_greeter_section_activate_first (IdeGreeterSection *self)
 
   return FALSE;
 }
+
+void
+ide_greeter_section_set_selection_mode (IdeGreeterSection *self,
+                                        gboolean           selection_mode)
+{
+  g_return_if_fail (IDE_IS_GREETER_SECTION (self));
+
+  if (IDE_GREETER_SECTION_GET_IFACE (self)->set_selection_mode)
+    IDE_GREETER_SECTION_GET_IFACE (self)->set_selection_mode (self, selection_mode);
+}
diff --git a/src/libide/greeter/ide-greeter-section.h b/src/libide/greeter/ide-greeter-section.h
index 93e269b..d9a959c 100644
--- a/src/libide/greeter/ide-greeter-section.h
+++ b/src/libide/greeter/ide-greeter-section.h
@@ -34,12 +34,14 @@ struct _IdeGreeterSectionInterface
 {
   GTypeInterface parent_iface;
 
-  void     (*project_activated) (IdeGreeterSection *self,
-                                 IdeProjectInfo    *project_info);
-  gint     (*get_priority)      (IdeGreeterSection *self);
-  gboolean (*filter)            (IdeGreeterSection *self,
-                                 DzlPatternSpec    *pattern);
-  gboolean (*activate_first)    (IdeGreeterSection *self);
+  void     (*project_activated)  (IdeGreeterSection *self,
+                                  IdeProjectInfo    *project_info);
+  gint     (*get_priority)       (IdeGreeterSection *self);
+  gboolean (*filter)             (IdeGreeterSection *self,
+                                  DzlPatternSpec    *pattern);
+  gboolean (*activate_first)     (IdeGreeterSection *self);
+  void     (*set_selection_mode) (IdeGreeterSection *self,
+                                  gboolean           selection_mode);
 };
 
 IDE_AVAILABLE_IN_3_28
@@ -52,5 +54,8 @@ void     ide_greeter_section_emit_project_activated (IdeGreeterSection *self,
                                                      IdeProjectInfo    *project_info);
 IDE_AVAILABLE_IN_3_28
 gboolean ide_greeter_section_activate_first         (IdeGreeterSection *self);
+IDE_AVAILABLE_IN_3_28
+void     ide_greeter_section_set_selection_mode     (IdeGreeterSection *self,
+                                                     gboolean           selection_mode);
 
 G_END_DECLS


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