[Xfce4-commits] [xfce/xfce4-settings] 15/22: Make MIME Type dialog pluggable

noreply at xfce.org noreply at xfce.org
Tue Sep 4 02:31:06 CEST 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository xfce/xfce4-settings.

commit c252894cae278dafa8fed7339b72732196483860
Author: Sean Davis <smd.seandavis at gmail.com>
Date:   Sat Sep 1 13:27:49 2018 -0400

    Make MIME Type dialog pluggable
---
 dialogs/mime-settings/main.c                       | 65 +++++++++++++++++++---
 dialogs/mime-settings/xfce-mime-window.c           | 42 +++++++++++++-
 dialogs/mime-settings/xfce-mime-window.h           |  5 ++
 .../mime-settings/xfce4-mime-settings.desktop.in   |  1 +
 4 files changed, 105 insertions(+), 8 deletions(-)

diff --git a/dialogs/mime-settings/main.c b/dialogs/mime-settings/main.c
index 33f7400..71d283c 100644
--- a/dialogs/mime-settings/main.c
+++ b/dialogs/mime-settings/main.c
@@ -27,6 +27,8 @@
 #include <glib.h>
 #include <gtk/gtk.h>
 
+#include <gdk/gdkx.h>
+
 #include <libxfce4util/libxfce4util.h>
 #include <xfconf/xfconf.h>
 
@@ -34,20 +36,34 @@
 
 
 
+static gint     opt_socket_id = 0;
 static gboolean opt_version = FALSE;
 static GOptionEntry entries[] =
 {
+    { "socket-id", 's', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, &opt_socket_id, N_("Settings manager socket"), N_("SOCKET ID") },
     { "version", 'v', 0, G_OPTION_ARG_NONE, &opt_version, N_("Version information"), NULL },
     { NULL }
 };
 
 
 
+static void
+mime_window_dialog_response (GtkWidget *dialog,
+                             gint       response_id)
+{
+    gtk_main_quit ();
+}
+
+
+
 gint
 main (gint argc, gchar **argv)
 {
-    GError    *error = NULL;
-    GtkWidget *window;
+    
+    XfceMimeWindow *window;
+    GtkWidget      *dialog;
+    GtkWidget      *plug;
+    GError         *error = NULL;
 
     /* setup translation domain */
     xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
@@ -91,12 +107,47 @@ main (gint argc, gchar **argv)
         g_error_free (error);
     }
 
-    window = g_object_new (XFCE_TYPE_MIME_WINDOW, NULL);
-    g_signal_connect (G_OBJECT (window), "response",
-        G_CALLBACK (gtk_main_quit), NULL);
-    gtk_window_present (GTK_WINDOW (window));
+    /* Create the window object */
+    window = xfce_mime_window_new ();
+
+    if (G_UNLIKELY (window == NULL))
+        {
+        g_error (_("Could not create the mime dialog."));
+        xfconf_shutdown ();
+        return EXIT_FAILURE;
+        }
+
+    DBG ("opt_socket_id = %i", opt_socket_id);
 
-    gtk_main ();
+    if (G_UNLIKELY (opt_socket_id == 0))
+        {
+        /* Create and run the settings dialog */
+        dialog = xfce_mime_window_create_dialog (window);
+
+        g_signal_connect (dialog, "response",
+          G_CALLBACK (mime_window_dialog_response), NULL);
+        gtk_window_present (GTK_WINDOW (dialog));
+
+        /* To prevent the settings dialog to be saved in the session */
+        gdk_x11_set_sm_client_id ("FAKE ID");
+
+        gtk_main ();
+        }
+    else
+        {
+        /* Embedd the settings dialog into the given socket ID */
+        plug = xfce_mime_window_create_plug (window, opt_socket_id);
+        g_signal_connect (plug, "delete-event", G_CALLBACK (gtk_main_quit), NULL);
+
+        /* Stop startup notification */
+        gdk_notify_startup_complete ();
+
+        /* To prevent the settings dialog to be saved in the session */
+        gdk_x11_set_sm_client_id ("FAKE ID");
+
+        /* Enter the main loop */
+        gtk_main ();
+        }
 
     xfconf_shutdown ();
 
diff --git a/dialogs/mime-settings/xfce-mime-window.c b/dialogs/mime-settings/xfce-mime-window.c
index 8715df6..38f501f 100644
--- a/dialogs/mime-settings/xfce-mime-window.c
+++ b/dialogs/mime-settings/xfce-mime-window.c
@@ -25,6 +25,7 @@
 #endif
 
 #include <gtk/gtk.h>
+#include <gtk/gtkx.h>
 #include <gio/gio.h>
 #include <libxfce4util/libxfce4util.h>
 #include <libxfce4ui/libxfce4ui.h>
@@ -78,6 +79,7 @@ struct _XfceMimeWindow
     XfconfChannel *channel;
 
     GtkWidget     *treeview;
+    GtkWidget     *plug_child;
 
     PangoAttrList *attrs_bold;
     GtkTreeModel  *mime_model;
@@ -175,7 +177,7 @@ xfce_mime_window_init (XfceMimeWindow *window)
         xfconf_channel_get_int (window->channel, "/last/window-width", 550),
         xfconf_channel_get_int (window->channel, "/last/window-height", 400));
 
-    vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
+    window->plug_child = vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
     area = gtk_dialog_get_content_area (GTK_DIALOG (window));
     gtk_box_pack_start (GTK_BOX (area), vbox, TRUE, TRUE, 0);
     gtk_widget_show (vbox);
@@ -1011,3 +1013,41 @@ xfce_mime_window_combo_populate (GtkCellRenderer *renderer,
     g_list_free (app_infos);
     g_object_unref (G_OBJECT (model));
 }
+
+
+
+XfceMimeWindow *
+xfce_mime_window_new (void)
+{
+  return g_object_new (XFCE_TYPE_MIME_WINDOW, NULL);
+}
+
+
+
+GtkWidget *
+xfce_mime_window_create_dialog (XfceMimeWindow *window)
+{
+  g_return_val_if_fail (XFCE_IS_MIME_WINDOW (window), NULL);
+  return GTK_WIDGET (window);
+}
+
+
+
+GtkWidget *
+xfce_mime_window_create_plug (XfceMimeWindow *window,
+                              gint            socket_id)
+{
+  GtkWidget *plug;
+  GObject   *child;
+
+  g_return_val_if_fail (XFCE_IS_MIME_WINDOW (window), NULL);
+
+  plug = gtk_plug_new (socket_id);
+  gtk_widget_show (plug);
+
+  child = G_OBJECT (window->plug_child);
+  xfce_widget_reparent (GTK_WIDGET (child), plug);
+  gtk_widget_show (GTK_WIDGET (child));
+
+  return plug;
+}
diff --git a/dialogs/mime-settings/xfce-mime-window.h b/dialogs/mime-settings/xfce-mime-window.h
index 0c48684..95b725e 100644
--- a/dialogs/mime-settings/xfce-mime-window.h
+++ b/dialogs/mime-settings/xfce-mime-window.h
@@ -35,6 +35,11 @@ typedef struct _XfceMimeWindow      XfceMimeWindow;
 
 GType      xfce_mime_window_get_type     (void) G_GNUC_CONST;
 
+XfceMimeWindow *xfce_mime_window_new           (void) G_GNUC_MALLOC;
+GtkWidget      *xfce_mime_window_create_dialog (XfceMimeWindow *settings);
+GtkWidget      *xfce_mime_window_create_plug   (XfceMimeWindow *settings,
+                                                gint            socket_id);
+
 G_END_DECLS
 
 #endif /* !__XFCE_MIME_WINDOW_H__ */
diff --git a/dialogs/mime-settings/xfce4-mime-settings.desktop.in b/dialogs/mime-settings/xfce4-mime-settings.desktop.in
index 0a30cd1..4955d6e 100644
--- a/dialogs/mime-settings/xfce4-mime-settings.desktop.in
+++ b/dialogs/mime-settings/xfce4-mime-settings.desktop.in
@@ -9,3 +9,4 @@ Type=Application
 Categories=XFCE;GTK;Settings;DesktopSettings;X-XFCE-SettingsDialog;X-XFCE-SystemSettings;
 StartupNotify=true
 OnlyShowIn=XFCE;
+X-XfcePluggable=true

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list