[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