[gimp] app: add gimp_tool_gui_add_button()



commit b23fae86f00c42e8ca2edcf7e480db88ca665aed
Author: Ell <ell_se yahoo com>
Date:   Thu Mar 7 16:01:08 2019 -0500

    app: add gimp_tool_gui_add_button()
    
    In GimpToolGui, add gimp_tool_gui_add_button() and
    gimp_tool_gui_add_buttons_valist(), which allow adding dialog
    buttons after construction.

 app/display/gimptoolgui.c | 144 +++++++++++++++++++++++++++++++---------------
 app/display/gimptoolgui.h |   6 ++
 2 files changed, 103 insertions(+), 47 deletions(-)
---
diff --git a/app/display/gimptoolgui.c b/app/display/gimptoolgui.c
index b12755b047..eb7b934e0b 100644
--- a/app/display/gimptoolgui.c
+++ b/app/display/gimptoolgui.c
@@ -84,27 +84,29 @@ struct _GimpToolGuiPrivate
 #define GET_PRIVATE(gui) ((GimpToolGuiPrivate *) gimp_tool_gui_get_instance_private ((GimpToolGui *) (gui)))
 
 
-static void   gimp_tool_gui_dispose         (GObject       *object);
-static void   gimp_tool_gui_finalize        (GObject       *object);
-
-static void   gimp_tool_gui_create_dialog   (GimpToolGui   *gui,
-                                             GdkMonitor    *monitor);
-static void   gimp_tool_gui_update_buttons  (GimpToolGui   *gui);
-static void   gimp_tool_gui_update_shell    (GimpToolGui   *gui);
-static void   gimp_tool_gui_update_viewable (GimpToolGui   *gui);
-
-static void   gimp_tool_gui_dialog_response (GtkWidget     *dialog,
-                                             gint           response_id,
-                                             GimpToolGui   *gui);
-static void   gimp_tool_gui_canvas_resized  (GtkWidget     *canvas,
-                                             GtkAllocation *allocation,
-                                             GimpToolGui   *gui);
-
-static ResponseEntry * response_entry_new   (gint           response_id,
-                                             const gchar   *button_text);
-static void            response_entry_free  (ResponseEntry *entry);
-static ResponseEntry * response_entry_find  (GList         *entries,
-                                             gint           response_id);
+static void            gimp_tool_gui_dispose           (GObject       *object);
+static void            gimp_tool_gui_finalize          (GObject       *object);
+
+static void            gimp_tool_gui_create_dialog     (GimpToolGui   *gui,
+                                                        GdkMonitor    *monitor);
+static void            gimp_tool_gui_add_dialog_button (GimpToolGui   *gui,
+                                                        ResponseEntry *entry);
+static void            gimp_tool_gui_update_buttons    (GimpToolGui   *gui);
+static void            gimp_tool_gui_update_shell      (GimpToolGui   *gui);
+static void            gimp_tool_gui_update_viewable   (GimpToolGui   *gui);
+
+static void            gimp_tool_gui_dialog_response   (GtkWidget     *dialog,
+                                                        gint           response_id,
+                                                        GimpToolGui   *gui);
+static void            gimp_tool_gui_canvas_resized    (GtkWidget     *canvas,
+                                                        GtkAllocation *allocation,
+                                                        GimpToolGui   *gui);
+
+static ResponseEntry * response_entry_new              (gint           response_id,
+                                                        const gchar   *button_text);
+static void            response_entry_free             (ResponseEntry *entry);
+static ResponseEntry * response_entry_find             (GList         *entries,
+                                                        gint           response_id);
 
 
 G_DEFINE_TYPE_WITH_PRIVATE (GimpToolGui, gimp_tool_gui, GIMP_TYPE_OBJECT)
@@ -252,16 +254,7 @@ gimp_tool_gui_new (GimpToolInfo *tool_info,
 
   va_start (args, overlay);
 
-  for (button_text = va_arg (args, const gchar *);
-       button_text;
-       button_text = va_arg (args, const gchar *))
-    {
-      gint response_id = va_arg (args, gint);
-
-      private->response_entries = g_list_append (private->response_entries,
-                                                 response_entry_new (response_id,
-                                                                     button_text));
-    }
+  gimp_tool_gui_add_buttons_valist (gui, args);
 
   va_end (args);
 
@@ -634,6 +627,45 @@ gimp_tool_gui_get_focus_on_map (GimpToolGui *gui)
   return GET_PRIVATE (gui)->focus_on_map;
 }
 
+void
+gimp_tool_gui_add_buttons_valist (GimpToolGui *gui,
+                                  va_list      args)
+{
+  const gchar *button_text;
+  gint         response_id;
+
+  g_return_if_fail (GIMP_IS_TOOL_GUI (gui));
+
+  while ((button_text = va_arg (args, const gchar *)))
+    {
+      response_id = va_arg (args, gint);
+
+      gimp_tool_gui_add_button (gui, button_text, response_id);
+    }
+}
+
+void
+gimp_tool_gui_add_button (GimpToolGui *gui,
+                          const gchar *button_text,
+                          gint         response_id)
+{
+  GimpToolGuiPrivate *private;
+  ResponseEntry     *entry;
+
+  g_return_if_fail (GIMP_IS_TOOL_GUI (gui));
+  g_return_if_fail (button_text != NULL);
+
+  private = GET_PRIVATE (gui);
+
+  entry = response_entry_new (response_id, button_text);
+
+  private->response_entries = g_list_append (private->response_entries,
+                                             entry);
+
+  if (private->dialog)
+    gimp_tool_gui_add_dialog_button (gui, entry);
+}
+
 void
 gimp_tool_gui_set_default_response (GimpToolGui *gui,
                                     gint         response_id)
@@ -743,14 +775,7 @@ gimp_tool_gui_create_dialog (GimpToolGui *gui,
         {
           ResponseEntry *entry = list->data;
 
-          gimp_overlay_dialog_add_button (GIMP_OVERLAY_DIALOG (private->dialog),
-                                          entry->button_text,
-                                          entry->response_id);
-
-          if (! entry->sensitive)
-            gimp_overlay_dialog_set_response_sensitive (GIMP_OVERLAY_DIALOG (private->dialog),
-                                                        entry->response_id,
-                                                        FALSE);
+          gimp_tool_gui_add_dialog_button (gui, entry);
         }
 
       if (private->default_response != -1)
@@ -777,14 +802,7 @@ gimp_tool_gui_create_dialog (GimpToolGui *gui,
         {
           ResponseEntry *entry = list->data;
 
-          gimp_dialog_add_button (GIMP_DIALOG (private->dialog),
-                                  entry->button_text,
-                                  entry->response_id);
-
-          if (! entry->sensitive)
-            gtk_dialog_set_response_sensitive (GTK_DIALOG (private->dialog),
-                                               entry->response_id,
-                                               FALSE);
+          gimp_tool_gui_add_dialog_button (gui, entry);
         }
 
       if (private->default_response != -1)
@@ -813,6 +831,38 @@ gimp_tool_gui_create_dialog (GimpToolGui *gui,
                            G_OBJECT (gui), 0);
 }
 
+static void
+gimp_tool_gui_add_dialog_button (GimpToolGui   *gui,
+                                 ResponseEntry *entry)
+{
+  GimpToolGuiPrivate *private = GET_PRIVATE (gui);
+
+  if (private->overlay)
+    {
+      gimp_overlay_dialog_add_button (GIMP_OVERLAY_DIALOG (private->dialog),
+                                      entry->button_text,
+                                      entry->response_id);
+
+      if (! entry->sensitive)
+        {
+          gimp_overlay_dialog_set_response_sensitive (
+            GIMP_OVERLAY_DIALOG (private->dialog),
+            entry->response_id, FALSE);
+        }
+    }
+  else
+    {
+      gimp_dialog_add_button (GIMP_DIALOG (private->dialog),
+                              entry->button_text,
+                              entry->response_id);
+
+      if (! entry->sensitive)
+        gtk_dialog_set_response_sensitive (GTK_DIALOG (private->dialog),
+                                           entry->response_id,
+                                           FALSE);
+    }
+}
+
 static void
 gimp_tool_gui_update_buttons (GimpToolGui *gui)
 {
diff --git a/app/display/gimptoolgui.h b/app/display/gimptoolgui.h
index 0ad7deba1d..f2b1698a7c 100644
--- a/app/display/gimptoolgui.h
+++ b/app/display/gimptoolgui.h
@@ -95,6 +95,12 @@ void          gimp_tool_gui_set_focus_on_map       (GimpToolGui      *gui,
                                                     gboolean          focus_on_map);
 gboolean      gimp_tool_gui_get_focus_on_map       (GimpToolGui      *gui);
 
+
+void          gimp_tool_gui_add_buttons_valist     (GimpToolGui      *gui,
+                                                    va_list           args);
+void          gimp_tool_gui_add_button             (GimpToolGui      *gui,
+                                                    const gchar      *button_text,
+                                                    gint              response_id);
 void          gimp_tool_gui_set_default_response   (GimpToolGui      *gui,
                                                     gint              response_id);
 void          gimp_tool_gui_set_response_sensitive (GimpToolGui      *gui,


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