gboolean panel_launch_desktop_file_with_fallback (const char *desktop_file, const char *fallback_exec, GdkScreen *screen, GError **error) { char *argv[2] = { (char *) fallback_exec, NULL }; GError *local_error; gboolean retval; g_return_val_if_fail (desktop_file != NULL, FALSE); g_return_val_if_fail (fallback_exec != NULL, FALSE); g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); /* need to pass a non-NULL error to avoid getting a dialog */ local_error = NULL; if (panel_launch_desktop_file (desktop_file, screen, &local_error)) return TRUE; if (local_error) { g_error_free (local_error); local_error = NULL; } retval = gdk_spawn_on_screen (screen, NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &local_error); if (local_error == NULL && retval == TRUE) return TRUE; return _panel_launch_handle_error (fallback_exec, screen, local_error, error); }
void panel_menu_button_invoke_menu (PanelMenuButton *button, const char *callback_name) { GdkScreen *screen; g_return_if_fail (PANEL_IS_MENU_BUTTON (button)); g_return_if_fail (callback_name != NULL); screen = gtk_widget_get_screen (GTK_WIDGET (button)); if (!strcmp (callback_name, "help")) { panel_show_help (screen, "user-guide.xml", "gospanel-37"); } else if (!strcmp (callback_name, "edit")) { GError *error = NULL; panel_launch_desktop_file ("alacarte.desktop", "alacarte-editor", screen, &error); if (error) { g_error_free (error); error = NULL; panel_launch_desktop_file ("gmenu-simple-editor.desktop", "gmenu-simple-editor", screen, &error); } if (error) { char *primary; primary = g_strdup_printf (_("Could not execute '%s'"), "gmenu-simple-editor"); panel_error_dialog (NULL, screen, "cannot_exec_gmenu-simple-editor", TRUE, primary, error->message); g_free (primary); g_error_free (error); } } }
gboolean panel_launch_desktop_file_with_fallback (const char *desktop_file, const char *fallback_exec, GdkScreen *screen, GError **error) { char *argv[2] = { (char *) fallback_exec, NULL }; GError *local_error; gboolean retval; GPid pid; char *display; g_return_val_if_fail (desktop_file != NULL, FALSE); g_return_val_if_fail (fallback_exec != NULL, FALSE); g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); /* need to pass a non-NULL error to avoid getting a dialog */ local_error = NULL; if (panel_launch_desktop_file (desktop_file, screen, &local_error)) return TRUE; if (local_error) { g_error_free (local_error); local_error = NULL; } display = gdk_screen_make_display_name (screen); retval = g_spawn_async (NULL, /* working directory */ argv, NULL, /* envp */ G_SPAWN_SEARCH_PATH, set_environment, &display, &pid, &local_error); g_free (display); if (local_error == NULL && retval == TRUE) { g_child_watch_add (pid, dummy_child_watch, NULL); } return TRUE; return _panel_launch_handle_error (fallback_exec, screen, local_error, error); }
void panel_menu_item_activate_desktop_file (GtkWidget *menuitem, const char *path) { GError *error; error = NULL; panel_launch_desktop_file (path, NULL, menuitem_to_screen (menuitem), &error); if (error) { panel_error_dialog (NULL, menuitem_to_screen (menuitem), "cannot_launch_entry", TRUE, _("Could not launch menu item"), error->message); g_error_free (error); } }
static void panel_action_lock_invoke_menu (PanelActionButton *button, const char *callback_name) { g_return_if_fail (PANEL_IS_ACTION_BUTTON (button)); g_return_if_fail (callback_name != NULL); if (g_strcmp0 (callback_name, "lock") == 0) panel_screensaver_lock (panel_screensaver_get ()); else if (g_strcmp0 (callback_name, "activate") == 0) panel_screensaver_activate (panel_screensaver_get ()); else if (g_strcmp0 (callback_name, "prefs") == 0) panel_launch_desktop_file ("gnome-screen-panel.desktop", gtk_widget_get_screen (GTK_WIDGET (button)), NULL); else g_assert_not_reached (); }
void panel_menu_item_activate_desktop_file (GtkWidget *menuitem, const char *path) { panel_launch_desktop_file (path, menuitem_to_screen (menuitem), NULL); }