gnome-panel-10-trusted-extensions.diff revision 15658
15159N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml panel.new/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml
15159N/A--- panel.orig/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml 2008-09-30 23:36:55.515915000 +0100
15159N/A+++ panel.new/applets/wncklet/GNOME_WorkspaceSwitcherApplet.xml 2008-09-30 23:37:20.470492000 +0100
13901N/A@@ -1,6 +1,9 @@
13901N/A <Root>
13901N/A <popups>
13901N/A <popup name="button3">
13901N/A+ <!-- SUN_BRANDING -->
13901N/A+ <menuitem name="Workspace Label Item" verb="ChangeWorkspaceLabel" _label="_Change Workspace Label..."/>
13901N/A+ <separator/>
13901N/A <menuitem name="Pager Preferences Item" verb="PagerPreferences" _label="_Preferences"
13901N/A pixtype="stock" pixname="gtk-properties"/>
13901N/A <menuitem name="Pager Help Item" verb="PagerHelp" _label="_Help"
15159N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/applets/wncklet/Makefile.am panel.new/applets/wncklet/Makefile.am
15159N/A--- panel.orig/applets/wncklet/Makefile.am 2008-09-30 23:36:55.538680000 +0100
15159N/A+++ panel.new/applets/wncklet/Makefile.am 2008-09-30 23:37:20.489771000 +0100
13901N/A@@ -5,6 +5,7 @@
13901N/A -I$(top_builddir)/libpanel-applet \
13901N/A $(WNCKLET_CFLAGS) \
13901N/A $(LIBPANEL_APPLET_CFLAGS) \
13901N/A+ $(LIBGNOMETSOL_CFLAGS) \
13901N/A $(DISABLE_DEPRECATED_CFLAGS) \
13901N/A $(WARN_CFLAGS) \
13901N/A -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
13901N/A@@ -18,6 +19,8 @@
13901N/A WNCKLET_SOURCES = \
13901N/A wncklet.c \
13901N/A wncklet.h \
13901N/A+ wnck-tsol.c \
13901N/A+ wnck-tsol.h \
13901N/A window-menu.c \
13901N/A window-menu.h \
13901N/A window-list.c \
15159N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/applets/wncklet/wnck-tsol.c panel.new/applets/wncklet/wnck-tsol.c
13901N/A--- panel.orig/applets/wncklet/wnck-tsol.c 1970-01-01 01:00:00.000000000 +0100
15159N/A+++ panel.new/applets/wncklet/wnck-tsol.c 2008-09-30 23:37:20.491920000 +0100
13901N/A@@ -0,0 +1,217 @@
13901N/A+#include <config.h>
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+
13901N/A+#include <stdlib.h>
13901N/A+#include <string.h>
13901N/A+#include <dlfcn.h>
13901N/A+#include <link.h>
13901N/A+#include <glib.h>
13901N/A+#include <panel-applet.h>
13901N/A+#include "wnck-tsol.h"
13901N/A+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
13901N/A+#include <libwnck/libwnck.h>
13901N/A+
13901N/A+static
13901N/A+void * dlopen_tsol (void)
13901N/A+{
13901N/A+ void *handle = NULL;
13901N/A+
13901N/A+ /*
13901N/A+ * No 64-bit version of libwnck so we can get away with hardcoding
13901N/A+ * to a single path on this occasion
13901N/A+ */
13901N/A+ if ((handle = dlopen ("/usr/lib/libtsol.so.2", RTLD_LAZY)) != NULL)
13901N/A+ return handle;
13901N/A+
13901N/A+ return handle;
13901N/A+}
13901N/A+
13901N/A+static
13901N/A+void * dlopen_xtsol (void)
13901N/A+{
13901N/A+ void *handle = NULL;
13901N/A+
13901N/A+ if ((handle = dlopen ("/usr/lib/libXtsol.so.1", RTLD_LAZY)) != NULL)
13901N/A+ return handle;
13901N/A+ if ((handle = dlopen ("/usr/openwin/lib/libXtsol.so.1", RTLD_LAZY)) != NULL)
13901N/A+ return handle;
13901N/A+
13901N/A+ return handle;
13901N/A+}
13901N/A+
13901N/A+static
13901N/A+void * dlopen_gnometsol (void)
13901N/A+{
13901N/A+ void *handle = NULL;
13901N/A+
13901N/A+ if ((handle = dlopen ("/usr/lib/libgnometsol.so", RTLD_LAZY)) != NULL)
13901N/A+ return handle;
13901N/A+
13901N/A+ return handle;
13901N/A+}
13901N/A+
13901N/A+
13901N/A+gboolean
13901N/A+_wnck_use_trusted_extensions (void)
13901N/A+{
13901N/A+ static int trusted = -1;
13901N/A+
13901N/A+ /*
13901N/A+ * Sun Trusted Extensions (tm) for Solaris (tm) support. (Damn I should be a lawyer).
13901N/A+ *
13901N/A+ * It is necessary to use dlopen because the label aware extensions to libwnck work
13901N/A+ * only on systems with the trusted extensions installed and with the SUN_TSOL
13901N/A+ * xserver extension present
13901N/A+ */
13901N/A+
13901N/A+ if (trusted < 0) {
13901N/A+ static gpointer tsol_handle = NULL;
13901N/A+ static gpointer xtsol_handle = NULL;
13901N/A+ static gpointer gnometsol_handle = NULL;
13901N/A+
13901N/A+ if (getenv ("TRUSTED_SESSION") == NULL) {
13901N/A+ trusted = 0;
13901N/A+ return 0;
13901N/A+ }
13901N/A+
13901N/A+ tsol_handle = dlopen_tsol ();
13901N/A+ if (tsol_handle != NULL)
13901N/A+ xtsol_handle = dlopen_xtsol ();
13901N/A+ if (tsol_handle && xtsol_handle) {
13901N/A+
13901N/A+ /* libtsol functions */
13901N/A+ libtsol_blequal = (tsol_blequal) dlsym (tsol_handle, "blequal");
13901N/A+ libtsol_label_to_str = (tsol_label_to_str) dlsym (tsol_handle, "label_to_str");
13901N/A+ libtsol_str_to_label = (tsol_str_to_label) dlsym (tsol_handle, "str_to_label");
13901N/A+ libtsol_m_label_dup = (tsol_m_label_dup) dlsym (tsol_handle, "m_label_dup");
13901N/A+ libtsol_m_label_free = (tsol_m_label_free) dlsym (tsol_handle, "m_label_free");
13901N/A+
13901N/A+ /* Other misc. libtsol functions */
13901N/A+ libtsol_blminimum = (tsol_blminimum) dlsym (tsol_handle, "blminimum");
13901N/A+ libtsol_blmaximum = (tsol_blmaximum) dlsym (tsol_handle, "blmaximum");
13901N/A+ libtsol_blinrange = (tsol_blinrange) dlsym (tsol_handle, "blinrange");
13901N/A+ libtsol_getuserrange = (tsol_getuserrange) dlsym (tsol_handle, "getuserrange");
13901N/A+ libtsol_blabel_alloc = (tsol_blabel_alloc) dlsym (tsol_handle, "blabel_alloc");
13901N/A+ libtsol_blabel_free = (tsol_blabel_free) dlsym (tsol_handle, "blabel_free");
13901N/A+ libtsol_bsllow = (tsol_bsllow) dlsym (tsol_handle, "bsllow");
13901N/A+ libtsol_bslhigh = (tsol_bslhigh) dlsym (tsol_handle, "bslhigh");
13901N/A+
13901N/A+ /* libXtsol functions */
13901N/A+ libxtsol_XTSOLgetClientLabel = (xtsol_XTSOLgetClientLabel) dlsym (xtsol_handle,
13901N/A+ "XTSOLgetClientLabel");
13901N/A+ libxtsol_XTSOLIsWindowTrusted = (xtsol_XTSOLIsWindowTrusted) dlsym (xtsol_handle,
13901N/A+ "XTSOLIsWindowTrusted");
13901N/A+
13901N/A+ if (libtsol_label_to_str == NULL ||
13901N/A+ libtsol_str_to_label == NULL ||
13901N/A+ libtsol_m_label_dup == NULL ||
13901N/A+ libtsol_m_label_free == NULL ||
13901N/A+ libtsol_blminimum == NULL ||
13901N/A+ libtsol_blmaximum == NULL ||
13901N/A+ libtsol_blinrange == NULL ||
13901N/A+ libtsol_getuserrange == NULL ||
13901N/A+ libtsol_blabel_alloc == NULL ||
13901N/A+ libtsol_blabel_free == NULL ||
13901N/A+ libtsol_bsllow == NULL ||
13901N/A+ libtsol_bslhigh == NULL ||
13901N/A+ libxtsol_XTSOLgetClientLabel == NULL ||
13901N/A+ libxtsol_XTSOLIsWindowTrusted == NULL) {
13901N/A+ dlclose (tsol_handle);
13901N/A+ dlclose (xtsol_handle);
13901N/A+ tsol_handle = NULL;
13901N/A+ xtsol_handle = NULL;
13901N/A+ }
13901N/A+ }
13901N/A+ gnometsol_handle = dlopen_gnometsol ();
13901N/A+ if (gnometsol_handle != NULL) {
13901N/A+ libgnometsol_gnome_label_builder_new =
13901N/A+ (gnometsol_gnome_label_builder_new) dlsym (gnometsol_handle,
13901N/A+ "gnome_label_builder_new");
13901N/A+ libgnometsol_gnome_label_builder_get_type =
13901N/A+ (gnometsol_gnome_label_builder_get_type) dlsym (gnometsol_handle,
13901N/A+ "gnome_label_builder_get_type");
13901N/A+ if (libgnometsol_gnome_label_builder_new == NULL ||
13901N/A+ libgnometsol_gnome_label_builder_get_type == NULL)
13901N/A+ gnometsol_handle = NULL;
13901N/A+ }
13901N/A+ trusted = ((tsol_handle != NULL) && (xtsol_handle != NULL) && (gnometsol_handle != NULL)) ? 1 : 0;
13901N/A+ }
13901N/A+ return trusted ? TRUE : FALSE;
13901N/A+}
13901N/A+
13901N/A+const char *
13901N/A+_wnck_get_min_label ()
13901N/A+{
13901N/A+ static char *min_label = NULL;
13901N/A+
13901N/A+ if (!min_label) {
13901N/A+ min_label = (char *) getenv ("USER_MIN_SL");
13901N/A+ }
13901N/A+ return min_label;
13901N/A+}
13901N/A+
13901N/A+const char*
13901N/A+_wnck_get_max_label()
13901N/A+{
13901N/A+ static char *max_label = NULL;
13901N/A+
13901N/A+ if (!max_label) {
13901N/A+ max_label = (char *) getenv ("USER_MAX_SL");
13901N/A+ }
13901N/A+ return max_label;
13901N/A+}
13901N/A+
13901N/A+
13901N/A+/* window selector part */
13901N/A+
13901N/A+static gboolean tsol_win_selector_label_expose_event (GtkWidget *widget,
13901N/A+ GdkEventExpose *event,
13901N/A+ gpointer data)
13901N/A+{
13901N/A+ WnckWindow *window = (WnckWindow *) data;
13901N/A+
13901N/A+ GdkGC *tmp_gc = gdk_gc_new (widget->window);
13901N/A+ gdk_gc_set_rgb_fg_color (tmp_gc, wnck_window_get_label_color (window));
13901N/A+
13901N/A+ gdk_draw_rectangle (widget->window,
13901N/A+ widget->style->black_gc,
13901N/A+ FALSE,
13901N/A+ event->area.x, event->area.y,
13901N/A+ event->area.width - 1, event->area.height - 1);
13901N/A+
13901N/A+ gdk_draw_rectangle (widget->window,
13901N/A+ tmp_gc,
13901N/A+ TRUE,
13901N/A+ event->area.x + 1, event->area.y + 1,
13901N/A+ event->area.width - 2, event->area.height - 2);
13901N/A+
13901N/A+ g_object_unref (tmp_gc);
13901N/A+
13901N/A+ return FALSE;
13901N/A+}
13901N/A+
13901N/A+GtkWidget *
13901N/A+window_menu_create_label_indicator (WnckWindow *window,
13901N/A+ GtkWidget *image)
13901N/A+{
13901N/A+ GtkWidget *da, *hbox;
13901N/A+ da = gtk_drawing_area_new ();
13901N/A+
13901N/A+ g_signal_connect (G_OBJECT (da), "expose_event",
13901N/A+ G_CALLBACK (tsol_win_selector_label_expose_event),
13901N/A+ window);
13901N/A+
13901N/A+ gtk_widget_set_size_request (da, 5, -1);
13901N/A+
13901N/A+ hbox = gtk_hbox_new (FALSE, 4);
13901N/A+
13901N/A+ gtk_container_add (GTK_CONTAINER (hbox), da);
13901N/A+ gtk_container_add (GTK_CONTAINER (hbox), image);
13901N/A+
13901N/A+ gtk_widget_show (da);
13901N/A+ gtk_widget_show (hbox);
13901N/A+ gtk_widget_show (image);
13901N/A+
13901N/A+ return hbox;
13901N/A+}
13901N/A+#endif /* HAVE_LIBGNOMETSOL */
15159N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/applets/wncklet/wnck-tsol.h panel.new/applets/wncklet/wnck-tsol.h
13901N/A--- panel.orig/applets/wncklet/wnck-tsol.h 1970-01-01 01:00:00.000000000 +0100
15159N/A+++ panel.new/applets/wncklet/wnck-tsol.h 2008-09-30 23:37:20.493579000 +0100
13901N/A@@ -0,0 +1,83 @@
13901N/A+#ifndef __WNCK_TSOL_H__
13901N/A+#define __WNCK_TSOL_H__
13901N/A+
13901N/A+#include <config.h>
13901N/A+
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+#include <glib-2.0/glib.h>
13901N/A+#include <panel-applet.h>
13901N/A+#include <tsol/label.h>
13901N/A+#include <sys/tsol/label_macro.h>
13901N/A+#include <X11/Xlib.h>
13901N/A+#include <X11/extensions/Xtsol.h>
13901N/A+#include <libgnometsol/label_builder.h>
13901N/A+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
13901N/A+#include <libwnck/libwnck.h>
13901N/A+
13901N/A+/* Libtsol functions */
13901N/A+
13901N/A+typedef int (*tsol_blequal) (const m_label_t *label1, const m_label_t *label2);
13901N/A+typedef int (*tsol_label_to_str) (const m_label_t *label, char **string,
13901N/A+ const m_label_str_t conversion_type,
13901N/A+ uint_t flags);
13901N/A+typedef int (*tsol_str_to_label) (const char *string, m_label_t **label,
13901N/A+ const m_label_type_t label_type, uint_t flags,
13901N/A+ int *error);
13901N/A+typedef void (*tsol_m_label_dup) (m_label_t **dst, const m_label_t *src);
13901N/A+typedef void (*tsol_m_label_free) (m_label_t *label);
13901N/A+
13901N/A+/* Other misc. libtsol functions that seem to be stable */
13901N/A+typedef blrange_t* (*tsol_getuserrange) (const char *username);
13901N/A+typedef int (*tsol_blinrange) (const m_label_t *label,
13901N/A+ const blrange_t *range);
13901N/A+typedef void (*tsol_blminimum) (m_label_t *minimum_label,
13901N/A+ const m_label_t *bounding_label);
13901N/A+typedef void (*tsol_blmaximum) (m_label_t *maximum_label,
13901N/A+ const m_label_t *bounding_label);
13901N/A+typedef m_label_t* (*tsol_blabel_alloc) (void);
13901N/A+typedef void (*tsol_blabel_free) (m_label_t *label_p);
13901N/A+typedef void (*tsol_bsllow) (m_label_t *label);
13901N/A+typedef void (*tsol_bslhigh) (m_label_t *label);
13901N/A+
13901N/A+/* libXtsol functions */
13901N/A+typedef Status (*xtsol_XTSOLgetClientLabel) (Display *dpy, XID xid,
13901N/A+ bslabel_t *sl);
13901N/A+typedef Bool (*xtsol_XTSOLIsWindowTrusted) (Display *dpy, Window win);
13901N/A+
13901N/A+extern gboolean _trusted_extensions_initialised;
13901N/A+
13901N/A+/* libgnometsol functions */
13901N/A+typedef GtkWidget* (*gnometsol_gnome_label_builder_new) (char *msg,
13901N/A+ blevel_t *upper, blevel_t *lower, int mode);
13901N/A+typedef GType (*gnometsol_gnome_label_builder_get_type) (void);
13901N/A+
13901N/A+/* libtsol functions */
13901N/A+tsol_blequal libtsol_blequal;
13901N/A+tsol_label_to_str libtsol_label_to_str;
13901N/A+tsol_str_to_label libtsol_str_to_label;
13901N/A+tsol_m_label_dup libtsol_m_label_dup;
13901N/A+tsol_m_label_free libtsol_m_label_free;
13901N/A+/* Other misc. libtsol functions */
13901N/A+tsol_blminimum libtsol_blminimum;
13901N/A+tsol_blmaximum libtsol_blmaximum;
13901N/A+tsol_blinrange libtsol_blinrange;
13901N/A+tsol_getuserrange libtsol_getuserrange;
13901N/A+tsol_blabel_alloc libtsol_blabel_alloc;
13901N/A+tsol_blabel_free libtsol_blabel_free;
13901N/A+tsol_bsllow libtsol_bsllow;
13901N/A+tsol_bslhigh libtsol_bslhigh;
13901N/A+
13901N/A+xtsol_XTSOLgetClientLabel libxtsol_XTSOLgetClientLabel;
13901N/A+xtsol_XTSOLIsWindowTrusted libxtsol_XTSOLIsWindowTrusted;
13901N/A+
13901N/A+gnometsol_gnome_label_builder_new libgnometsol_gnome_label_builder_new;
13901N/A+gnometsol_gnome_label_builder_get_type libgnometsol_gnome_label_builder_get_type;
13901N/A+
13901N/A+gboolean _wnck_use_trusted_extensions ();
13901N/A+const char* _wnck_get_min_label ();
13901N/A+const char* _wnck_get_max_label ();
13901N/A+
13901N/A+GtkWidget* window_menu_create_label_indicator (WnckWindow *window,
13901N/A+ GtkWidget *image);
13901N/A+#endif /* HAVE_LIBGNOMETSOL */
13901N/A+#endif
15658N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/config.h.in panel.new/config.h.in
15658N/A--- panel.orig/config.h.in 2008-09-30 23:36:55.709069000 +0100
15658N/A+++ panel.new/config.h.in 2008-09-30 23:37:20.540322000 +0100
15658N/A@@ -104,6 +104,9 @@
15658N/A /* Define to 1 if you have the <unistd.h> header file. */
15658N/A #undef HAVE_UNISTD_H
15658N/A
15658N/A+/* Define when GNOME Trusted Solaris Extension lib libgnometsol detected. */
15658N/A+#undef HAVE_LIBGNOMETSOL
15658N/A+
15658N/A /* Define to 1 if you have the `_NSGetEnviron' function. */
15658N/A #undef HAVE__NSGETENVIRON
15658N/A
15658N/Adiff -urN -x '*.orig' -x '*.rej' panel.orig/gnome-panel/panel-applet-frame.c panel.new/gnome-panel/panel-applet-frame.c
15658N/A--- panel.orig/gnome-panel/panel-applet-frame.c 2008-09-30 23:36:56.328853000 +0100
15658N/A+++ panel.new/gnome-panel/panel-applet-frame.c 2008-09-30 23:41:50.185847000 +0100
15658N/A@@ -382,8 +382,23 @@
15658N/A if (!applet_iid || !applet_iid[0])
15658N/A return;
15658N/A
15658N/A- panel_applet_frame_load (applet_iid, panel_widget,
15658N/A- locked, position, TRUE, id);
15658N/A+ /* TJDS - This is to make sure that when user is logged into Multilevel
15658N/A+ * Trusted session, these applets will not be loaded onto the panel.
15658N/A+ */
15658N/A+ if (gnome_desktop_tsol_is_multi_label_session () &&
15658N/A+ !gnome_desktop_tsol_is_clearance_admin_high() &&
15658N/A+ (strcmp (applet_iid, "OAFIID:GNOME_StickyNotesApplet")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:Deskbar_Applet")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:GNOME_WebEyes")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:GNOME_MailcheckApplet")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:GNOME_Panel_TrashApplet")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:GNOME_TSClientApplet")==0 ||
15658N/A+ strcmp (applet_iid, "OAFIID:GNOME_PilotApplet")==0))
15658N/A+ /* do nothing */
15658N/A+ ;
15658N/A+ else
15658N/A+ panel_applet_frame_load (applet_iid, panel_widget,
15658N/A+ locked, position, TRUE, id);
15658N/A
15658N/A g_free (applet_iid);
15658N/A }
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/applets/wncklet/workspace-switcher.c gnome-panel-2.25.3/applets/wncklet/workspace-switcher.c
15658N/A--- gnome-panel-2.25.3.old/applets/wncklet/workspace-switcher.c 2009-01-13 17:48:25.919705000 +0000
15658N/A+++ gnome-panel-2.25.3/applets/wncklet/workspace-switcher.c 2009-01-13 17:54:10.402068000 +0000
13901N/A@@ -27,6 +27,10 @@
15658N/A #include <libwnck/libwnck.h>
13901N/A #include <gconf/gconf-client.h>
13901N/A
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+#include "wnck-tsol.h"
13901N/A+#endif
13901N/A+
13901N/A #include "workspace-switcher.h"
13901N/A
13901N/A #include "wncklet.h"
15658N/A@@ -41,6 +45,8 @@
15658N/A
15658N/A #define WORKSPACE_SWITCHER_ICON "gnome-panel-workspace-switcher"
13901N/A
13901N/A+gboolean ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
13901N/A+
13901N/A typedef enum {
13901N/A PAGER_WM_METACITY,
13901N/A PAGER_WM_COMPIZ,
15658N/A@@ -80,6 +86,20 @@ typedef struct {
13901N/A guint listeners [3];
13901N/A } PagerData;
13901N/A
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+static void tsol_workspace_created (WnckScreen *screen,
13901N/A+ WnckWorkspace *workspace,
13901N/A+ gpointer data);
13901N/A+static void role_changed (WnckWorkspace *workspace,
13901N/A+ gpointer data);
13901N/A+static void changed_workspace (WnckScreen *screen,
13901N/A+ WnckWorkspace *previously_active_space,
13901N/A+ gpointer data);
13901N/A+static void workspace_label_dialog (BonoboUIComponent *uic,
13901N/A+ PagerData *pager,
13901N/A+ const gchar *verbname);
13901N/A+#endif
15658N/A+
13901N/A static void display_properties_dialog (BonoboUIComponent *uic,
13901N/A PagerData *pager,
13901N/A const gchar *verbname);
15658N/A@@ -176,6 +196,44 @@ applet_realized (PanelApplet *applet,
13901N/A G_CALLBACK (window_manager_changed),
13901N/A pager,
13901N/A pager->applet);
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+ if (_wnck_use_trusted_extensions ()) {
13901N/A+ /*
13901N/A+ * Monitor all events that might require the workspace label menu
13901N/A+ * to be hidden/unhidden.
13901N/A+ */
13901N/A+ int i, wscount;
13901N/A+ WnckWorkspace *space;
13901N/A+ wscount = wnck_screen_get_workspace_count (pager->screen);
13901N/A+ for (i = 0; i < wscount; i++) {
13901N/A+ space = wnck_screen_get_workspace (pager->screen, i);
13901N/A+ wncklet_connect_while_alive (G_OBJECT (space), "role_changed",
13901N/A+ G_CALLBACK (role_changed),
13901N/A+ (gpointer) pager,
13901N/A+ pager->applet);
13901N/A+ }
13901N/A+
13901N/A+ wncklet_connect_while_alive (G_OBJECT (pager->screen),
13901N/A+ "workspace_created",
13901N/A+ G_CALLBACK (tsol_workspace_created),
13901N/A+ (gpointer) pager,
13901N/A+ pager->applet);
13901N/A+ wncklet_connect_while_alive (G_OBJECT (pager->screen),
13901N/A+ "active_workspace_changed",
13901N/A+ G_CALLBACK (changed_workspace),
13901N/A+ (gpointer) pager,
13901N/A+ pager->applet);
13901N/A+ }
13901N/A+
13901N/A+ /*
13901N/A+ * Trigger the active_workspace_changed callback function manually
13901N/A+ * to set up the initial hidden/unhidden state of the ChangeWorkspaceLabel
13901N/A+ * menu item.
13901N/A+ */
13901N/A+ changed_workspace (pager->screen,
13901N/A+ wnck_screen_get_active_workspace (pager->screen),
13901N/A+ (gpointer) pager);
13901N/A+#endif
13901N/A }
13901N/A
13901N/A static void
15658N/A@@ -340,6 +398,9 @@ destroy_pager(GtkWidget * widget, PagerD
13901N/A }
13901N/A
13901N/A static const BonoboUIVerb pager_menu_verbs [] = {
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+ BONOBO_UI_UNSAFE_VERB ("ChangeWorkspaceLabel", workspace_label_dialog),
13901N/A+#endif
13901N/A BONOBO_UI_UNSAFE_VERB ("PagerPreferences", display_properties_dialog),
13901N/A BONOBO_UI_UNSAFE_VERB ("PagerHelp", display_help_dialog),
13901N/A BONOBO_UI_UNSAFE_VERB ("PagerAbout", display_about_dialog),
15658N/A@@ -591,6 +652,16 @@ workspace_switcher_applet_fill (PanelApp
13901N/A NULL);
13901N/A }
13901N/A
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+ if (!_wnck_use_trusted_extensions ()) {
13901N/A+ BonoboUIComponent *popup_component;
13901N/A+ popup_component = panel_applet_get_popup_component (PANEL_APPLET (pager->applet));
13901N/A+ bonobo_ui_component_set_prop (popup_component,
13901N/A+ "/commands/ChangeWorkspaceLabel",
13901N/A+ "hidden", "1",
13901N/A+ NULL);
13901N/A+ }
13901N/A+#endif
13901N/A return TRUE;
13901N/A }
13901N/A
15658N/A@@ -1035,6 +1106,239 @@ setup_dialog (GladeXML *xml,
13901N/A update_properties_for_wm (pager);
13901N/A }
13901N/A
13901N/A+#ifdef HAVE_LIBGNOMETSOL
13901N/A+/* WARNING
13901N/A+ * DON'T ever call this from outside any code that has first done
13901N/A+ * a runtime trusted extension check!!! There is no point anyway.
13901N/A+ */
13901N/A+
13901N/A+void
13901N/A+lbuilder_response_cb (GtkDialog *dialog, gint id, gpointer data)
13901N/A+{
13901N/A+ int error;
13901N/A+ m_label_t *sl = NULL;
13901N/A+ char *label;
13901N/A+ WnckWorkspace *space;
13901N/A+
13901N/A+ if (!_wnck_use_trusted_extensions ())
13901N/A+ return;
13901N/A+/*
13901N/A+ * Stops the GNOME_LABEL_BUILDER cast calling
13901N/A+ * gnome_label_builder_get_type() directly
13901N/A+ */
13901N/A+#define GNOME_TYPE_LABEL_BUILDER (libgnometsol_gnome_label_builder_get_type ())
13901N/A+
13901N/A+ GnomeLabelBuilder *lbuilder = GNOME_LABEL_BUILDER (dialog);
13901N/A+ space = WNCK_WORKSPACE (data);
13901N/A+
13901N/A+ switch (id) {
13901N/A+ case GTK_RESPONSE_OK:
13901N/A+ g_object_get (G_OBJECT (lbuilder), "sl", &sl, NULL);
13901N/A+
13901N/A+ /* I should probably check the return code here but the label is
13901N/A+ * coming from an internal function */
13901N/A+ error = libtsol_label_to_str (sl, &label, M_INTERNAL, LONG_NAMES);
13901N/A+ if (label != NULL) {
13901N/A+ wnck_workspace_change_label (space, label);
13901N/A+ }
13901N/A+ g_free (label);
13901N/A+ libtsol_m_label_free (sl);
13901N/A+ gtk_widget_destroy (GTK_WIDGET (lbuilder));
13901N/A+ ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
13901N/A+ break;
13901N/A+ case GTK_RESPONSE_HELP:
13901N/A+ /* show help and return control */
13901N/A+ break;
13901N/A+ case GTK_RESPONSE_CANCEL:
13901N/A+ /* We dont want to change the workspace label so bye-bye */
13901N/A+ gtk_widget_destroy (GTK_WIDGET (lbuilder));
13901N/A+ ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
13901N/A+ break;
13901N/A+ default:
13901N/A+ /* We shouldn't really have got here */
13901N/A+ break;
13901N/A+ }
13901N/A+
13901N/A+ return;
13901N/A+}
13901N/A+
13901N/A+static void
13901N/A+tsol_workspace_created (WnckScreen *screen,
13901N/A+ WnckWorkspace *space,
13901N/A+ gpointer data)
13901N/A+{
13901N/A+ if (!_wnck_use_trusted_extensions ())
13901N/A+ return;
13901N/A+ g_signal_connect (G_OBJECT (space), "role_changed",
13901N/A+ G_CALLBACK (role_changed),
13901N/A+ data);
13901N/A+}
13901N/A+
13901N/A+static void
13901N/A+role_changed (WnckWorkspace *workspace,
13901N/A+ gpointer data)
13901N/A+{
13901N/A+ PagerData *pager;
13901N/A+ int rolewsindex;
13901N/A+ int activewsindex;
13901N/A+
13901N/A+ if (!_wnck_use_trusted_extensions ())
13901N/A+ return;
13901N/A+
13901N/A+ pager = (PagerData *) data;
13901N/A+ rolewsindex = wnck_workspace_get_number (workspace);
13901N/A+ activewsindex = wnck_workspace_get_number (wnck_screen_get_active_workspace (pager->screen));
13901N/A+ /*
13901N/A+ * Ignore role changes that occured outside the active workspace.
13901N/A+ * The menu item is always relative to the active workspace
13901N/A+ */
13901N/A+ if (rolewsindex == activewsindex)
13901N/A+ changed_workspace (pager->screen,
13901N/A+ wnck_screen_get_active_workspace (pager->screen),
13901N/A+ pager);
13901N/A+}
13901N/A+
13901N/A+static void
13901N/A+changed_workspace (WnckScreen *screen,
13901N/A+ WnckWorkspace *previously_active_space,
13901N/A+ gpointer data)
13901N/A+{
13901N/A+ BonoboUIComponent *popup_component;
13901N/A+ PagerData *pager;
13901N/A+ WnckWorkspace *workspace;
13901N/A+ m_label_t *lower_sl = NULL;
13901N/A+ m_label_t *upper_clear = NULL;
13901N/A+ char *lower_bound = NULL;
13901N/A+ char *upper_bound = NULL;
13901N/A+ int error;
13901N/A+ int menusensitivity = 1;
13901N/A+
13901N/A+ if (!_wnck_use_trusted_extensions ())
13901N/A+ return;
13901N/A+
13901N/A+ pager = (PagerData *) data;
13901N/A+
13901N/A+ workspace = wnck_screen_get_active_workspace (screen);
13901N/A+ error = wnck_workspace_get_label_range (workspace, &lower_bound,
13901N/A+ &upper_bound);
13901N/A+ if (error != 0)
13901N/A+ return;
13901N/A+
13901N/A+ /* Convert the lower and upper bounds to internal binary labels */
13901N/A+ if (libtsol_str_to_label (lower_bound, &lower_sl, MAC_LABEL, L_DEFAULT,
13901N/A+ &error) < 0) {
13901N/A+ g_warning ("Workspace has invalid label range min value");
13901N/A+ g_free (lower_bound);
13901N/A+ g_free (upper_bound);
13901N/A+ return;
13901N/A+ }
13901N/A+ g_free (lower_bound);
13901N/A+
13901N/A+ if (libtsol_str_to_label (upper_bound, &upper_clear, USER_CLEAR, L_DEFAULT,
13901N/A+ &error) < 0) {
13901N/A+ g_warning ("Workspace has invalid label range clearance value");
13901N/A+ g_free (upper_bound);
13901N/A+ libtsol_m_label_free (lower_sl);
13901N/A+ return;
13901N/A+ }
13901N/A+ g_free (upper_bound);
13901N/A+
13901N/A+ /* Hide/Unhide the "Change Workspace Label" menu */
13901N/A+ popup_component = panel_applet_get_popup_component (PANEL_APPLET (pager->applet));
13901N/A+ if (libtsol_blequal (lower_sl, upper_clear))
13901N/A+ menusensitivity = 0;
13901N/A+
13901N/A+ libtsol_m_label_free (lower_sl);
13901N/A+ libtsol_m_label_free (upper_clear);
13901N/A+ bonobo_ui_component_set_prop (popup_component,
13901N/A+ "/commands/ChangeWorkspaceLabel",
13901N/A+ "sensitive", menusensitivity ? "1" : "0",
13901N/A+ NULL);
13901N/A+}
13901N/A+static void
13901N/A+workspace_label_dialog (BonoboUIComponent *uic,
13901N/A+ PagerData *pager,
13901N/A+ const gchar *verbname)
13901N/A+{
13901N/A+ int error = 0;
13901N/A+ const char *cur_ws_label;
13901N/A+ char *lower_bound = NULL;
13901N/A+ char *upper_bound = NULL;
13901N/A+
13901N/A+ m_label_t *ws_sl = NULL;
13901N/A+ m_label_t *lower_sl = NULL;
13901N/A+ m_label_t *upper_clear = NULL;
13901N/A+ GtkWidget *lbuilder = NULL;
13901N/A+ WnckWorkspace *wspace = NULL;
13901N/A+ WnckScreen *screen = pager->screen;
13901N/A+
13901N/A+ if (ugly_showing_lbuilder_global_which_sucks_fix_me) return;
13901N/A+
13901N/A+ if (!_wnck_use_trusted_extensions ())
13901N/A+ return;
13901N/A+
13901N/A+ wspace = wnck_screen_get_active_workspace (screen);
13901N/A+ error = wnck_workspace_get_label_range (wspace, &lower_bound,
13901N/A+ &upper_bound);
13901N/A+ if (error != 0)
13901N/A+ return;
13901N/A+
13901N/A+ /* Convert the lower and upper bounds to internal binary labels */
13901N/A+ if (libtsol_str_to_label (lower_bound, &lower_sl, MAC_LABEL, L_DEFAULT,
13901N/A+ &error) < 0) {
13901N/A+ g_warning ("Workspace has invalid label range minimum label");
13901N/A+ g_free (lower_bound);
13901N/A+ g_free (upper_bound);
13901N/A+ return;
13901N/A+ }
13901N/A+ g_free (lower_bound);
13901N/A+
13901N/A+ if (libtsol_str_to_label (upper_bound, &upper_clear, USER_CLEAR, L_DEFAULT,
13901N/A+ &error) < 0) {
13901N/A+ g_warning ("Workspace has invalid label range");
13901N/A+ g_free (upper_bound);
13901N/A+ libtsol_m_label_free (lower_sl);
13901N/A+ return;
13901N/A+ }
13901N/A+ g_free (upper_bound);
13901N/A+
13901N/A+ /* Get the current workspace label. */
13901N/A+ cur_ws_label = wnck_workspace_get_label (wspace);
13901N/A+ if (cur_ws_label != NULL) {
13901N/A+ /* Convert the workspace's current label to binary type */
13901N/A+ if (libtsol_str_to_label (cur_ws_label, &ws_sl, MAC_LABEL, L_DEFAULT,
13901N/A+ &error) < 0) {
13901N/A+ g_warning ("Workspace has an invalid label");
13901N/A+ return;
13901N/A+ }
13901N/A+ } else {
13901N/A+ g_warning ("No workspace label - defaulting to lowest in range");
13901N/A+ libtsol_m_label_dup (&ws_sl, lower_sl);
13901N/A+ }
13901N/A+
13901N/A+ /* SUN_BRANDING */
13901N/A+ lbuilder = libgnometsol_gnome_label_builder_new(_("Changing Workspace Label"),
13901N/A+ upper_clear, lower_sl,
13901N/A+ LBUILD_MODE_SL);
13901N/A+ if (gtk_widget_has_screen (pager->applet)) {
13901N/A+ gtk_window_set_screen (GTK_WINDOW (lbuilder),
13901N/A+ gtk_widget_get_screen (pager->applet));
13901N/A+ }
13901N/A+
13901N/A+ g_signal_connect (G_OBJECT (lbuilder), "response",
13901N/A+ G_CALLBACK (lbuilder_response_cb), (gpointer) wspace);
13901N/A+
13901N/A+ gtk_widget_show_all (lbuilder);
13901N/A+ ugly_showing_lbuilder_global_which_sucks_fix_me = TRUE;
13901N/A+
13901N/A+ /* GAH, why do I have to do this after the show? */
13901N/A+ g_object_set (G_OBJECT (lbuilder), "sl", ws_sl, NULL);
13901N/A+ libtsol_m_label_free (ws_sl);
13901N/A+ libtsol_m_label_free (lower_sl);
13901N/A+ libtsol_m_label_free (upper_clear);
13901N/A+}
13901N/A+#endif
13901N/A+
13901N/A static void
13901N/A display_properties_dialog (BonoboUIComponent *uic,
13901N/A PagerData *pager,
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/configure.in gnome-panel-2.25.3/configure.in
15658N/A--- gnome-panel-2.25.3.old/configure.in 2009-01-13 17:48:26.171519000 +0000
15658N/A+++ gnome-panel-2.25.3/configure.in 2009-01-13 17:55:43.693748000 +0000
15658N/A@@ -78,6 +78,8 @@ PKG_CHECK_MODULES(LIBPANEL_APPLET, ORBit
13901N/A AC_SUBST(LIBPANEL_APPLET_CFLAGS)
13901N/A AC_SUBST(LIBPANEL_APPLET_LIBS)
13901N/A
13901N/A+PKG_CHECK_EXISTS(libgnometsol >= 0.5, AC_DEFINE(HAVE_LIBGNOMETSOL,,[Building with GNOMETSOL support]),,)
13901N/A+
15658N/A PKG_CHECK_MODULES(FISH, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED cairo >= $CAIRO_REQUIRED)
15658N/A AC_SUBST(FISH_CFLAGS)
15658N/A AC_SUBST(FISH_LIBS)
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/gnome-panel/panel-action-button.c gnome-panel-2.25.3/gnome-panel/panel-action-button.c
15658N/A--- gnome-panel-2.25.3.old/gnome-panel/panel-action-button.c 2009-01-13 17:48:25.961682000 +0000
15658N/A+++ gnome-panel-2.25.3/gnome-panel/panel-action-button.c 2009-01-13 17:58:13.718538000 +0000
13901N/A@@ -31,6 +31,7 @@
13901N/A #include "panel-action-button.h"
13901N/A
13901N/A #include <glib/gi18n.h>
13901N/A+#include <libgnome/gnome-desktop-tsol-extensions.h>
13901N/A
13901N/A #include <libpanel-util/panel-error.h>
15658N/A #include <libpanel-util/panel-launch.h>
15658N/A@@ -223,6 +224,14 @@ panel_action_search (GtkWidget *widget)
15658N/A GdkScreen *screen;
13901N/A
13901N/A screen = gtk_widget_get_screen (widget);
13901N/A+
13901N/A+ if (gnome_desktop_tsol_is_multi_label_session ()) {
13901N/A+ char *cmd = g_strdup_printf ("%d:gnome-serch-tool", gdk_screen_get_number (screen));
13901N/A+ gnome_desktop_tsol_proxy_app_launch (cmd);
13901N/A+ g_free (cmd);
13901N/A+ return;
13901N/A+ }
13901N/A+
15658N/A panel_launch_desktop_file_with_fallback ("gnome-search-tool.desktop",
15658N/A "gnome-search-tool",
15658N/A screen, NULL);
15658N/A@@ -248,6 +257,13 @@ panel_action_connect_server (GtkWidget *
13901N/A screen = gtk_widget_get_screen (GTK_WIDGET (widget));
13901N/A error = NULL;
13901N/A
13901N/A+ if (gnome_desktop_tsol_is_multi_label_session ()) {
13901N/A+ char *cmd = g_strdup_printf ("%d:nautilus-connect-server", gdk_screen_get_number (screen));
13901N/A+ gnome_desktop_tsol_proxy_app_launch (cmd);
13901N/A+ g_free (cmd);
13901N/A+ return;
13901N/A+ }
13901N/A+
13901N/A gdk_spawn_command_line_on_screen (screen, "nautilus-connect-server",
13901N/A &error);
13901N/A
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/gnome-panel/panel-addto.c gnome-panel-2.25.3/gnome-panel/panel-addto.c
15658N/A--- gnome-panel-2.25.3.old/gnome-panel/panel-addto.c 2009-01-13 17:48:25.936392000 +0000
15658N/A+++ gnome-panel-2.25.3/gnome-panel/panel-addto.c 2009-01-13 18:00:16.078379000 +0000
15159N/A@@ -26,6 +26,7 @@
15159N/A #include <string.h>
15159N/A
15159N/A #include <libbonobo.h>
15159N/A+#include <libgnome/gnome-desktop-tsol-extensions.h>
15159N/A
15658N/A #include <glib/gi18n.h>
15159N/A
15658N/A@@ -448,6 +449,20 @@ panel_addto_query_applets (GSList *list)
15159N/A continue;
15159N/A }
15159N/A
15159N/A+ /* TJDS - if MLS and has not admin_high clearance do not
15159N/A+ * display the following applets in the mnenu list.
15159N/A+ */
15159N/A+ if (gnome_desktop_tsol_is_multi_label_session () &&
15159N/A+ !gnome_desktop_tsol_is_clearance_admin_high() &&
15159N/A+ (strcmp (info->iid, "OAFIID:GNOME_StickyNotesApplet")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:Deskbar_Applet")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:GNOME_WebEyes")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:GNOME_MailcheckApplet")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:GNOME_Panel_TrashApplet")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:GNOME_TSClientApplet")==0 ||
15159N/A+ strcmp (info->iid, "OAFIID:GNOME_PilotApplet")==0))
15159N/A+ continue;
15159N/A+
15159N/A applet = g_new0 (PanelAddtoItemInfo, 1);
15159N/A applet->type = PANEL_ADDTO_APPLET;
15159N/A applet->name = g_strdup (name);
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/gnome-panel/panel-menu-items.c gnome-panel-2.25.3/gnome-panel/panel-menu-items.c
15658N/A--- gnome-panel-2.25.3.old/gnome-panel/panel-menu-items.c 2009-01-13 17:48:25.948385000 +0000
15658N/A+++ gnome-panel-2.25.3/gnome-panel/panel-menu-items.c 2009-01-13 18:08:00.817875000 +0000
13901N/A@@ -38,6 +38,7 @@
13901N/A #include <string.h>
13901N/A #include <glib/gi18n.h>
13901N/A #include <gio/gio.h>
13901N/A+#include <libgnome/gnome-desktop-tsol-extensions.h>
13901N/A
13901N/A #include <libpanel-util/panel-error.h>
13901N/A #include <libpanel-util/panel-glib.h>
15658N/A@@ -127,6 +128,19 @@ static void
13901N/A activate_home_uri (GtkWidget *menuitem,
13901N/A gpointer data)
13901N/A {
13901N/A+ char *cmd;
13901N/A+ GdkScreen *screen;
13901N/A+
13901N/A+ if (gnome_desktop_tsol_is_multi_label_session ()) {
13901N/A+ screen = gtk_window_get_screen (GTK_WINDOW (menuitem));
13901N/A+ cmd = g_strdup_printf ("%d:nautilus file://%s",
13901N/A+ gdk_screen_get_number (screen),
13901N/A+ g_get_home_dir ());
13901N/A+ gnome_desktop_tsol_proxy_app_launch (cmd);
13901N/A+ g_free (cmd);
13901N/A+ return;
13901N/A+ }
13901N/A+
13901N/A activate_path (menuitem, g_get_home_dir ());
13901N/A }
13901N/A
15658N/A@@ -134,6 +148,19 @@ static void
13901N/A activate_desktop_uri (GtkWidget *menuitem,
13901N/A gpointer data)
13901N/A {
13901N/A+ char *cmd;
13901N/A+ GdkScreen *screen;
13901N/A+
13901N/A+ if (gnome_desktop_tsol_is_multi_label_session ()) {
13901N/A+ screen = gtk_window_get_screen (GTK_WINDOW (menuitem));
13901N/A+ cmd = g_strdup_printf ("%d:nautilus file://%s",
13901N/A+ gdk_screen_get_number (screen),
13901N/A+ g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
13901N/A+ gnome_desktop_tsol_proxy_app_launch (cmd);
13901N/A+ g_free (cmd);
13901N/A+ return;
13901N/A+ }
13901N/A+
13901N/A activate_path (menuitem,
13901N/A g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
13901N/A }
15658N/A@@ -977,8 +1004,10 @@ panel_place_menu_item_create_menu (Panel
15159N/A g_free (uri);
15159N/A }
15159N/A
15159N/A- panel_place_menu_item_append_gtk_bookmarks (places_menu);
15159N/A- add_menu_separator (places_menu);
15159N/A+ if (!gnome_desktop_tsol_is_multi_label_session ()) {
15159N/A+ panel_place_menu_item_append_gtk_bookmarks (places_menu);
15159N/A+ add_menu_separator (places_menu);
15159N/A+ }
15159N/A
15159N/A gconf_name = gconf_client_get_string (panel_gconf_get_client (),
15159N/A COMPUTER_NAME_KEY,
15658N/A@@ -989,8 +1018,10 @@ panel_place_menu_item_create_menu (Panel
15658N/A if (gconf_name)
15658N/A g_free (gconf_name);
15159N/A
15159N/A- panel_place_menu_item_append_local_gio (place_item, places_menu);
15159N/A- add_menu_separator (places_menu);
15159N/A+ if (!gnome_desktop_tsol_is_multi_label_session ()) {
15159N/A+ panel_place_menu_item_append_local_gio (place_item, places_menu);
15159N/A+ add_menu_separator (places_menu);
15159N/A+ }
13901N/A
15159N/A panel_menu_items_append_from_desktop (places_menu,
15159N/A "network-scheme.desktop",
15658N/A/jds/bin/diff -uprN gnome-panel-2.25.3.old/gnome-panel/panel-run-dialog.c gnome-panel-2.25.3/gnome-panel/panel-run-dialog.c
15658N/A--- gnome-panel-2.25.3.old/gnome-panel/panel-run-dialog.c 2009-01-13 17:48:25.951598000 +0000
15658N/A+++ gnome-panel-2.25.3/gnome-panel/panel-run-dialog.c 2009-01-13 18:09:57.977244000 +0000
15159N/A@@ -41,6 +41,7 @@
15159N/A #include <gio/gio.h>
15159N/A #include <gdk/gdkkeysyms.h>
15159N/A #include <glade/glade-xml.h>
15159N/A+#include <libgnome/gnome-desktop-tsol-extensions.h>
15159N/A #include <libgnomeui/gnome-entry.h>
15658N/A #include <gconf/gconf-client.h>
15658N/A #include <gmenu-tree.h>
15658N/A@@ -300,6 +301,17 @@ panel_run_dialog_launch_command (PanelRu
15159N/A GError *error = NULL;
15159N/A char **argv;
15159N/A int argc;
15159N/A+ char *tsolcmd;
13901N/A+
15159N/A+ screen = gtk_window_get_screen (GTK_WINDOW (dialog->run_dialog));
15159N/A+
15159N/A+ if (gnome_desktop_tsol_is_multi_label_session ()) {
15159N/A+ tsolcmd = g_strdup_printf ("%d:%s",
15159N/A+ gdk_screen_get_number (screen), command);
15159N/A+ gnome_desktop_tsol_proxy_app_launch (tsolcmd);
15159N/A+ g_free (tsolcmd);
15159N/A+ return TRUE;
15159N/A+ }
15159N/A
15658N/A if (!command_is_executable (locale_command, &argc, &argv))
15159N/A return FALSE;