10139N/A+ <menuitem name="Workspace Label Item" verb="ChangeWorkspaceLabel" _label="_Change Workspace Label..."/>
10139N/A <menuitem name="Pager Preferences Item" verb="PagerPreferences" _label="_Preferences"
10139N/A pixtype="stock" pixname="gtk-properties"/>
14019N/A <menuitem name="Pager Help Item" verb="PagerHelp" _label="_Help"
14122N/A -I$(top_builddir)/libpanel-applet \
11844N/A -DGNOMELOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \
10139N/A+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
10139N/A+ * No 64-bit version of libwnck so we can get away with hardcoding
10139N/A+ * to a single path on this occasion
10139N/A+_wnck_use_trusted_extensions (void)
10139N/A+ * Sun Trusted Extensions (tm) for Solaris (tm) support. (Damn I should be a lawyer).
10139N/A+ * It is necessary to use dlopen because the label aware extensions to libwnck work
10139N/A+ * only on systems with the trusted extensions installed and with the SUN_TSOL
10139N/A+ static gpointer tsol_handle = NULL;
10139N/A+ static gpointer xtsol_handle = NULL;
15395N/A+ static gpointer gnometsol_handle = NULL;
14019N/A+ if (getenv ("TRUSTED_SESSION") == NULL) {
11844N/A+ xtsol_handle = dlopen_xtsol ();
11844N/A+ if (tsol_handle && xtsol_handle) {
11121N/A+ libtsol_blequal = (tsol_blequal) dlsym (tsol_handle, "blequal");
11121N/A+ libtsol_label_to_str = (tsol_label_to_str) dlsym (tsol_handle, "label_to_str");
10920N/A+ libtsol_str_to_label = (tsol_str_to_label) dlsym (tsol_handle, "str_to_label");
10920N/A+ libtsol_m_label_dup = (tsol_m_label_dup) dlsym (tsol_handle, "m_label_dup");
10851N/A+ libtsol_m_label_free = (tsol_m_label_free) dlsym (tsol_handle, "m_label_free");
10139N/A+ /* Other misc. libtsol functions */
10139N/A+ libtsol_blminimum = (tsol_blminimum) dlsym (tsol_handle, "blminimum");
10139N/A+ libtsol_blmaximum = (tsol_blmaximum) dlsym (tsol_handle, "blmaximum");
10139N/A+ libtsol_blinrange = (tsol_blinrange) dlsym (tsol_handle, "blinrange");
10139N/A+ libtsol_getuserrange = (tsol_getuserrange) dlsym (tsol_handle, "getuserrange");
10139N/A+ libtsol_blabel_alloc = (tsol_blabel_alloc) dlsym (tsol_handle, "blabel_alloc");
10139N/A+ libtsol_blabel_free = (tsol_blabel_free) dlsym (tsol_handle, "blabel_free");
10139N/A+ libtsol_bsllow = (tsol_bsllow) dlsym (tsol_handle, "bsllow");
10139N/A+ libtsol_bslhigh = (tsol_bslhigh) dlsym (tsol_handle, "bslhigh");
10139N/A+ libxtsol_XTSOLgetClientLabel = (xtsol_XTSOLgetClientLabel) dlsym (xtsol_handle,
10139N/A+ libxtsol_XTSOLIsWindowTrusted = (xtsol_XTSOLIsWindowTrusted) dlsym (xtsol_handle,
10139N/A+ if (libtsol_label_to_str == NULL ||
10139N/A+ libtsol_str_to_label == NULL ||
10139N/A+ libtsol_m_label_dup == NULL ||
10139N/A+ libtsol_m_label_free == NULL ||
10139N/A+ libtsol_getuserrange == NULL ||
10139N/A+ libtsol_blabel_alloc == NULL ||
10139N/A+ libtsol_blabel_free == NULL ||
10139N/A+ libxtsol_XTSOLgetClientLabel == NULL ||
10139N/A+ libxtsol_XTSOLIsWindowTrusted == NULL) {
10139N/A+ gnometsol_handle = dlopen_gnometsol ();
10139N/A+ if (gnometsol_handle != NULL) {
10139N/A+ libgnometsol_gnome_label_builder_new =
10139N/A+ (gnometsol_gnome_label_builder_new) dlsym (gnometsol_handle,
10139N/A+ libgnometsol_gnome_label_builder_get_type =
10139N/A+ (gnometsol_gnome_label_builder_get_type) dlsym (gnometsol_handle,
10139N/A+ "gnome_label_builder_get_type");
+ if (libgnometsol_gnome_label_builder_new == NULL ||
+ libgnometsol_gnome_label_builder_get_type == NULL)
+ gnometsol_handle = NULL;
+ trusted = ((tsol_handle != NULL) && (xtsol_handle != NULL) && (gnometsol_handle != NULL)) ? 1 : 0;
+ return trusted ? TRUE : FALSE;
+ static char *min_label = NULL;
+ min_label = (char *) getenv ("USER_MIN_SL");
+ static char *max_label = NULL;
+ max_label = (char *) getenv ("USER_MAX_SL");
+/* window selector part */
+static gboolean tsol_win_selector_label_expose_event (GtkWidget *widget,
+ WnckWindow *window = (WnckWindow *) data;
+ GdkGC *tmp_gc = gdk_gc_new (widget->window);
+ gdk_gc_set_rgb_fg_color (tmp_gc, wnck_window_get_label_color (window));
+ gdk_draw_rectangle (widget->window,
+ widget->style->black_gc,
+ gdk_draw_rectangle (widget->window,
+ g_object_unref (tmp_gc);
+window_menu_create_label_indicator (WnckWindow *window,
+ da = gtk_drawing_area_new ();
+ g_signal_connect (G_OBJECT (da), "expose_event",
+ G_CALLBACK (tsol_win_selector_label_expose_event),
+ gtk_widget_set_size_request (da, 5, -1);
+ hbox = gtk_hbox_new (FALSE, 4);
+ gtk_container_add (GTK_CONTAINER (hbox), da);
+ gtk_container_add (GTK_CONTAINER (hbox), image);
+ gtk_widget_show (hbox);
+ gtk_widget_show (image);
+#endif /* HAVE_LIBGNOMETSOL */
+#ifdef HAVE_LIBGNOMETSOL
+#define WNCK_I_KNOW_THIS_IS_UNSTABLE
+typedef int (*tsol_blequal) (const m_label_t *label1, const m_label_t *label2);
+typedef int (*tsol_label_to_str) (const m_label_t *label, char **string,
+ const m_label_str_t conversion_type,
+typedef int (*tsol_str_to_label) (const char *string, m_label_t **label,
+ const m_label_type_t label_type, uint_t flags,
+typedef void (*tsol_m_label_dup) (m_label_t **dst, const m_label_t *src);
+typedef void (*tsol_m_label_free) (m_label_t *label);
+/* Other misc. libtsol functions that seem to be stable */
+typedef blrange_t* (*tsol_getuserrange) (const char *username);
+typedef int (*tsol_blinrange) (const m_label_t *label,
+ const blrange_t *range);
+typedef void (*tsol_blminimum) (m_label_t *minimum_label,
+ const m_label_t *bounding_label);
+typedef void (*tsol_blmaximum) (m_label_t *maximum_label,
+ const m_label_t *bounding_label);
+typedef m_label_t* (*tsol_blabel_alloc) (void);
+typedef void (*tsol_blabel_free) (m_label_t *label_p);
+typedef void (*tsol_bsllow) (m_label_t *label);
+typedef void (*tsol_bslhigh) (m_label_t *label);
+/* libXtsol functions */
+typedef Status (*xtsol_XTSOLgetClientLabel) (Display *dpy, XID xid,
+typedef Bool (*xtsol_XTSOLIsWindowTrusted) (Display *dpy, Window win);
+extern gboolean _trusted_extensions_initialised;
+/* libgnometsol functions */
+typedef GtkWidget* (*gnometsol_gnome_label_builder_new) (char *msg,
+ blevel_t *upper, blevel_t *lower, int mode);
+typedef GType (*gnometsol_gnome_label_builder_get_type) (void);
+tsol_blequal libtsol_blequal;
+tsol_label_to_str libtsol_label_to_str;
+tsol_str_to_label libtsol_str_to_label;
+tsol_m_label_dup libtsol_m_label_dup;
+tsol_m_label_free libtsol_m_label_free;
+/* Other misc. libtsol functions */
+tsol_blminimum libtsol_blminimum;
+tsol_blmaximum libtsol_blmaximum;
+tsol_blinrange libtsol_blinrange;
+tsol_getuserrange libtsol_getuserrange;
+tsol_blabel_alloc libtsol_blabel_alloc;
+tsol_blabel_free libtsol_blabel_free;
+tsol_bsllow libtsol_bsllow;
+tsol_bslhigh libtsol_bslhigh;
+xtsol_XTSOLgetClientLabel libxtsol_XTSOLgetClientLabel;
+xtsol_XTSOLIsWindowTrusted libxtsol_XTSOLIsWindowTrusted;
+gnometsol_gnome_label_builder_new libgnometsol_gnome_label_builder_new;
+gnometsol_gnome_label_builder_get_type libgnometsol_gnome_label_builder_get_type;
+gboolean _wnck_use_trusted_extensions ();
+const char* _wnck_get_min_label ();
+const char* _wnck_get_max_label ();
+GtkWidget* window_menu_create_label_indicator (WnckWindow *window,
+#endif /* HAVE_LIBGNOMETSOL */
+#ifdef HAVE_LIBGNOMETSOL
#define WORKSPACE_SWITCHER_ICON "gnome-panel-workspace-switcher"
+gboolean ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
+#ifdef HAVE_LIBGNOMETSOL
+static void tsol_workspace_created (WnckScreen *screen,
+ WnckWorkspace *workspace,
+static void role_changed (WnckWorkspace *workspace,
+static void changed_workspace (WnckScreen *screen,
+ WnckWorkspace *previously_active_space,
+static void workspace_label_dialog (BonoboUIComponent *uic,
+ const gchar *verbname);
static void display_properties_dialog (BonoboUIComponent *uic,
G_CALLBACK (window_manager_changed),
+#ifdef HAVE_LIBGNOMETSOL
+ if (_wnck_use_trusted_extensions ()) {
+ * Monitor all events that might require the workspace label menu
+ wscount = wnck_screen_get_workspace_count (pager->screen);
+ for (i = 0; i < wscount; i++) {
+ space = wnck_screen_get_workspace (pager->screen, i);
+ wncklet_connect_while_alive (G_OBJECT (space), "role_changed",
+ G_CALLBACK (role_changed),
+ wncklet_connect_while_alive (G_OBJECT (pager->screen),
+ G_CALLBACK (tsol_workspace_created),
+ wncklet_connect_while_alive (G_OBJECT (pager->screen),
+ "active_workspace_changed",
+ G_CALLBACK (changed_workspace),
+ * Trigger the active_workspace_changed callback function manually
+ * to set up the initial
hidden/unhidden state of the ChangeWorkspaceLabel
+ changed_workspace (pager->screen,
+ wnck_screen_get_active_workspace (pager->screen),
static const BonoboUIVerb pager_menu_verbs [] = {
+#ifdef HAVE_LIBGNOMETSOL
+ BONOBO_UI_UNSAFE_VERB ("ChangeWorkspaceLabel", workspace_label_dialog),
BONOBO_UI_UNSAFE_VERB ("PagerPreferences", display_properties_dialog),
BONOBO_UI_UNSAFE_VERB ("PagerHelp", display_help_dialog),
BONOBO_UI_UNSAFE_VERB ("PagerAbout", display_about_dialog),
+#ifdef HAVE_LIBGNOMETSOL
+ if (!_wnck_use_trusted_extensions ()) {
+ BonoboUIComponent *popup_component;
+ popup_component = panel_applet_get_popup_component (PANEL_APPLET (pager->applet));
+ bonobo_ui_component_set_prop (popup_component,
update_properties_for_wm (pager);
+#ifdef HAVE_LIBGNOMETSOL
+ * DON'T ever call this from outside any code that has first done
+ * a runtime trusted extension check!!! There is no point anyway.
+lbuilder_response_cb (GtkDialog *dialog, gint id, gpointer data)
+ if (!_wnck_use_trusted_extensions ())
+ * Stops the GNOME_LABEL_BUILDER cast calling
+ * gnome_label_builder_get_type() directly
+#define GNOME_TYPE_LABEL_BUILDER (libgnometsol_gnome_label_builder_get_type ())
+ GnomeLabelBuilder *lbuilder = GNOME_LABEL_BUILDER (dialog);
+ space = WNCK_WORKSPACE (data);
+ g_object_get (G_OBJECT (lbuilder), "sl", &sl, NULL);
+ /* I should probably check the return code here but the label is
+ * coming from an internal function */
+ error = libtsol_label_to_str (sl, &label, M_INTERNAL, LONG_NAMES);
+ wnck_workspace_change_label (space, label);
+ libtsol_m_label_free (sl);
+ gtk_widget_destroy (GTK_WIDGET (lbuilder));
+ ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
+ case GTK_RESPONSE_HELP:
+ /* show help and return control */
+ case GTK_RESPONSE_CANCEL:
+ /* We dont want to change the workspace label so bye-bye */
+ gtk_widget_destroy (GTK_WIDGET (lbuilder));
+ ugly_showing_lbuilder_global_which_sucks_fix_me = FALSE;
+ /* We shouldn't really have got here */
+tsol_workspace_created (WnckScreen *screen,
+ if (!_wnck_use_trusted_extensions ())
+ g_signal_connect (G_OBJECT (space), "role_changed",
+ G_CALLBACK (role_changed),
+role_changed (WnckWorkspace *workspace,
+ if (!_wnck_use_trusted_extensions ())
+ pager = (PagerData *) data;
+ rolewsindex = wnck_workspace_get_number (workspace);
+ activewsindex = wnck_workspace_get_number (wnck_screen_get_active_workspace (pager->screen));
+ * Ignore role changes that occured outside the active workspace.
+ * The menu item is always relative to the active workspace
+ if (rolewsindex == activewsindex)
+ changed_workspace (pager->screen,
+ wnck_screen_get_active_workspace (pager->screen),
+changed_workspace (WnckScreen *screen,
+ WnckWorkspace *previously_active_space,
+ BonoboUIComponent *popup_component;
+ WnckWorkspace *workspace;
+ m_label_t *lower_sl = NULL;
+ m_label_t *upper_clear = NULL;
+ char *lower_bound = NULL;
+ char *upper_bound = NULL;
+ int menusensitivity = 1;
+ if (!_wnck_use_trusted_extensions ())
+ pager = (PagerData *) data;
+ workspace = wnck_screen_get_active_workspace (screen);
+ error = wnck_workspace_get_label_range (workspace, &lower_bound,
+ /* Convert the lower and upper bounds to internal binary labels */
+ if (libtsol_str_to_label (lower_bound, &lower_sl, MAC_LABEL, L_DEFAULT,
+ g_warning ("Workspace has invalid label range min value");
+ if (libtsol_str_to_label (upper_bound, &upper_clear, USER_CLEAR, L_DEFAULT,
+ g_warning ("Workspace has invalid label range clearance value");
+ libtsol_m_label_free (lower_sl);
+ popup_component = panel_applet_get_popup_component (PANEL_APPLET (pager->applet));
+ if (libtsol_blequal (lower_sl, upper_clear))
+ libtsol_m_label_free (lower_sl);
+ libtsol_m_label_free (upper_clear);
+ bonobo_ui_component_set_prop (popup_component,
+ "sensitive", menusensitivity ? "1" : "0",
+workspace_label_dialog (BonoboUIComponent *uic,
+ const char *cur_ws_label;
+ char *lower_bound = NULL;
+ char *upper_bound = NULL;
+ m_label_t *ws_sl = NULL;
+ m_label_t *lower_sl = NULL;
+ m_label_t *upper_clear = NULL;
+ GtkWidget *lbuilder = NULL;
+ WnckWorkspace *wspace = NULL;
+ WnckScreen *screen = pager->screen;
+ if (ugly_showing_lbuilder_global_which_sucks_fix_me) return;
+ if (!_wnck_use_trusted_extensions ())
+ wspace = wnck_screen_get_active_workspace (screen);
+ error = wnck_workspace_get_label_range (wspace, &lower_bound,
+ /* Convert the lower and upper bounds to internal binary labels */
+ if (libtsol_str_to_label (lower_bound, &lower_sl, MAC_LABEL, L_DEFAULT,
+ g_warning ("Workspace has invalid label range minimum label");
+ if (libtsol_str_to_label (upper_bound, &upper_clear, USER_CLEAR, L_DEFAULT,
+ g_warning ("Workspace has invalid label range");
+ libtsol_m_label_free (lower_sl);
+ /* Get the current workspace label. */
+ cur_ws_label = wnck_workspace_get_label (wspace);
+ if (cur_ws_label != NULL) {
+ /* Convert the workspace's current label to binary type */
+ if (libtsol_str_to_label (cur_ws_label, &ws_sl, MAC_LABEL, L_DEFAULT,
+ g_warning ("Workspace has an invalid label");
+ g_warning ("No workspace label - defaulting to lowest in range");
+ libtsol_m_label_dup (&ws_sl, lower_sl);
+ lbuilder = libgnometsol_gnome_label_builder_new(_("Changing Workspace Label"),
+ if (gtk_widget_has_screen (pager->applet)) {
+ gtk_window_set_screen (GTK_WINDOW (lbuilder),
+ gtk_widget_get_screen (pager->applet));
+ g_signal_connect (G_OBJECT (lbuilder), "response",
+ G_CALLBACK (lbuilder_response_cb), (gpointer) wspace);
+ gtk_widget_show_all (lbuilder);
+ ugly_showing_lbuilder_global_which_sucks_fix_me = TRUE;
+ /* GAH, why do I have to do this after the show? */
+ g_object_set (G_OBJECT (lbuilder), "sl", ws_sl, NULL);
+ libtsol_m_label_free (ws_sl);
+ libtsol_m_label_free (lower_sl);
+ libtsol_m_label_free (upper_clear);
display_properties_dialog (BonoboUIComponent *uic,
/* Define to 1 if you have the <
unistd.h> header file. */
+/* Define when GNOME Trusted Solaris Extension lib libgnometsol detected. */
+#undef HAVE_LIBGNOMETSOL
/* Define to 1 if you have the `_NSGetEnviron' function. */
#undef HAVE__NSGETENVIRON
AC_SUBST(LIBPANEL_APPLET_CFLAGS)
AC_SUBST(LIBPANEL_APPLET_LIBS)
+PKG_CHECK_EXISTS(libgnometsol >= 0.5, AC_DEFINE(HAVE_LIBGNOMETSOL,,[Building with GNOMETSOL support]),,)
PKG_CHECK_MODULES(FISH, gtk+-2.0 >= $GTK_REQUIRED libglade-2.0 >= $LIBGLADE_REQUIRED cairo >= $CAIRO_REQUIRED)
gdk_app_launch_context_set_timestamp (context, timestamp);
- retval = g_app_info_launch_uris (appinfo, uris,
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ char *cmd = g_strdup_printf ("%d:%s",
+ gdk_screen_get_number (screen),
+ g_app_info_get_commandline (appinfo));
+ gnome_desktop_tsol_proxy_app_launch (cmd);
+ retval = g_app_info_launch_uris (appinfo, uris,
(GAppLaunchContext *) context,
g_object_unref (context);
screen = gtk_widget_get_screen (widget);
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ char *cmd = g_strdup_printf ("%d:gnome-search-tool", gdk_screen_get_number (screen));
+ gnome_desktop_tsol_proxy_app_launch (cmd);
screen = gtk_widget_get_screen (GTK_WIDGET (widget));
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ char *cmd = g_strdup_printf ("%d:nautilus-connect-server", gdk_screen_get_number (screen));
+ gnome_desktop_tsol_proxy_app_launch (cmd);
gdk_spawn_command_line_on_screen (screen, "nautilus-connect-server",
+ /* TJDS - if MLS and has not admin_high clearance do not
+ * display the following applets in the mnenu list.
+ if (gnome_desktop_tsol_is_multi_label_session () &&
+ !gnome_desktop_tsol_is_clearance_admin_high() &&
+ (strcmp (info->iid, "OAFIID:GNOME_StickyNotesApplet")==0 ||
+ strcmp (info->iid, "OAFIID:Deskbar_Applet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_WebEyes")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_MailcheckApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_Panel_TrashApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_TSClientApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_QuickLoungeApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_MultiLoadApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_NetStatusApplet")==0 ||
+ strcmp (info->iid, "OAFIID:GNOME_PilotApplet")==0))
applet = g_new0 (PanelAddtoItemInfo, 1);
applet->type = PANEL_ADDTO_APPLET;
applet->name = g_strdup (name);
if (!applet_iid || !applet_iid[0])
- panel_applet_frame_load (applet_iid, panel_widget,
- locked, position, TRUE, id);
+ /* TJDS - This is to make sure that when user is logged into Multilevel
+ * Trusted session, these applets will not be loaded onto the panel.
+ if (gnome_desktop_tsol_is_multi_label_session () &&
+ !gnome_desktop_tsol_is_clearance_admin_high() &&
+ (strcmp (applet_iid, "OAFIID:GNOME_StickyNotesApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:Deskbar_Applet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_WebEyes")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_MailcheckApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_Panel_TrashApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_TSClientApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_QuickLoungeApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_MultiLoadApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_NetStatusApplet")==0 ||
+ strcmp (applet_iid, "OAFIID:GNOME_PilotApplet")==0))
+ panel_applet_frame_load (applet_iid, panel_widget,
+ locked, position, TRUE, id);
activate_home_uri (GtkWidget *menuitem,
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ screen = gtk_window_get_screen (GTK_WINDOW (menuitem));
+ cmd = g_strdup_printf ("%d:nautilus file://%s",
+ gdk_screen_get_number (screen),
+ gnome_desktop_tsol_proxy_app_launch (cmd);
activate_path (menuitem, g_get_home_dir ());
activate_desktop_uri (GtkWidget *menuitem,
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ screen = gtk_window_get_screen (GTK_WINDOW (menuitem));
+ cmd = g_strdup_printf ("%d:nautilus file://%s",
+ gdk_screen_get_number (screen),
+ g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
+ gnome_desktop_tsol_proxy_app_launch (cmd);
g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP));
- panel_place_menu_item_append_gtk_bookmarks (places_menu);
- add_menu_separator (places_menu);
+ if (!gnome_desktop_tsol_is_multi_label_session ()) {
+ panel_place_menu_item_append_gtk_bookmarks (places_menu);
+ add_menu_separator (places_menu);
gconf_name = gconf_client_get_string (panel_gconf_get_client (),
- panel_place_menu_item_append_local_gio (place_item, places_menu);
- add_menu_separator (places_menu);
+ if (!gnome_desktop_tsol_is_multi_label_session ()) {
+ panel_place_menu_item_append_local_gio (place_item, places_menu);
+ add_menu_separator (places_menu);
panel_menu_items_append_from_desktop (places_menu,
if (g_path_is_absolute (path))
ditem = gnome_desktop_item_new_from_file (path, 0, NULL);
gnome_desktop_item_unref (ditem);
return; /* Don't launch as it's a forbidden desktop file */
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ stripped = gnome_desktop_item_get_string (ditem, GNOME_DESKTOP_ITEM_EXEC);
+ cmd = g_strdup_printf ("%d:%s",
+ gdk_screen_get_number (
+ menuitem_to_screen (menuitem)),
+ gnome_desktop_tsol_proxy_app_launch (cmd);
+ panel_launch_desktop_file (path, menuitem_to_screen (menuitem), NULL);
gnome_desktop_item_unref (ditem);
- panel_launch_desktop_file (path, menuitem_to_screen (menuitem), NULL);
+ screen = gtk_window_get_screen (GTK_WINDOW (dialog->run_dialog));
+ if (gnome_desktop_tsol_is_multi_label_session ()) {
+ tsolcmd = g_strdup_printf ("%d:%s",
+ gdk_screen_get_number (screen), command);
+ gnome_desktop_tsol_proxy_app_launch (tsolcmd);
if (!command_is_executable (locale_command, &argc, &argv))