summaryrefslogtreecommitdiff
path: root/xfce4-session/xfsm-startup.c
diff options
context:
space:
mode:
authorAlexander Schwinn <alexxcons@xfce.org>2019-03-24 23:52:42 +0100
committerSimon Steinbeiss <simon.steinbeiss@elfenbeinturm.at>2019-04-25 00:52:24 +0200
commit88346bde9ea6850caaf91e6868813b3132e76b10 (patch)
tree5aaf477aab9f692c4821d07333acd8440e843b89 /xfce4-session/xfsm-startup.c
parente10ac91be3301c92900168855b265101ba9884e2 (diff)
downloadxfce4-session-88346bde9ea6850caaf91e6868813b3132e76b10.tar.gz
Move three methods from startup.c to xfsm-global.c/.h
They will be reused on logout, shutdown, etc. (See Bug #10172)
Diffstat (limited to 'xfce4-session/xfsm-startup.c')
-rw-r--r--xfce4-session/xfsm-startup.c296
1 files changed, 2 insertions, 294 deletions
diff --git a/xfce4-session/xfsm-startup.c b/xfce4-session/xfsm-startup.c
index e487bcd9..04d3853c 100644
--- a/xfce4-session/xfsm-startup.c
+++ b/xfce4-session/xfsm-startup.c
@@ -467,304 +467,12 @@ figure_app_name (const gchar *program_path)
-static gboolean
-xfsm_check_valid_exec (const gchar *exec)
-{
- gboolean result = TRUE;
- gchar *tmp;
- gchar *p;
-
- if (*exec == '/')
- {
- result = (access (exec, X_OK) == 0);
- }
- else
- {
- tmp = g_strdup (exec);
- p = strchr (tmp, ' ');
- if (G_UNLIKELY (p != NULL))
- *p = '\0';
-
- p = g_find_program_in_path (tmp);
- g_free (tmp);
-
- if (G_UNLIKELY (p == NULL))
- {
- result = FALSE;
- }
- else
- {
- result = (access (p, X_OK) == 0);
- g_free (p);
- }
- }
-
- return result;
-}
-
-
-
-static void
-xfsm_startup_autostart_migrate (void)
-{
- const gchar *entry;
- gchar source_path[4096];
- gchar target_path[4096];
- gchar *source;
- gchar *target;
- FILE *fp;
- GDir *dp;
-
- /* migrate the content */
- source = xfce_get_homefile ("Desktop", "Autostart/", NULL);
- dp = g_dir_open (source, 0, NULL);
- if (G_UNLIKELY (dp != NULL))
- {
- /* check if the LOCATION-CHANGED.txt file exists and the target can be opened */
- g_snprintf (source_path, 4096, "%s/LOCATION-CHANGED.txt", source);
- target = xfce_resource_save_location (XFCE_RESOURCE_CONFIG, "autostart/", TRUE);
- if (G_LIKELY (target != NULL && !g_file_test (source_path, G_FILE_TEST_IS_REGULAR)))
- {
- g_message ("Trying to migrate autostart items from %s to %s...", source, target);
-
- for (;;)
- {
- entry = g_dir_read_name (dp);
- if (entry == NULL)
- break;
-
- /* determine full source and dest paths */
- g_snprintf (source_path, 4096, "%s%s", source, entry);
- g_snprintf (target_path, 4096, "%s%s", target, entry);
-
- /* try to move the file */
- if (rename (source_path, target_path) < 0)
- {
- g_warning ("Failed to rename %s to %s: %s",
- source_path, target_path,
- g_strerror (errno));
- continue;
- }
-
- /* check if the file is executable */
- if (!g_file_test (target_path, G_FILE_TEST_IS_EXECUTABLE))
- continue;
-
- /* generate a .desktop file for the executable file */
- g_snprintf (source_path, 4096, "%s.desktop", target_path);
- if (!g_file_test (source_path, G_FILE_TEST_IS_REGULAR))
- {
- fp = fopen (source_path, "w");
- if (G_LIKELY (fp != NULL))
- {
- fprintf (fp,
- "# This file was automatically generated for the autostart\n"
- "# item %s\n"
- "[Desktop Entry]\n"
- "Type=Application\n"
- "Exec=%s\n"
- "Hidden=False\n"
- "Terminal=False\n"
- "StartupNotify=False\n"
- "Version=0.9.4\n"
- "Name=%s\n",
- entry, target_path, entry);
- fclose (fp);
- }
- else
- {
- g_warning ("Failed to create a .desktop file for %s: %s",
- target_path, g_strerror (errno));
- }
- }
- }
-
- /* create the LOCATION-CHANGED.txt file to let the user know */
- g_snprintf (source_path, 4096, "%s/LOCATION-CHANGED.txt", source);
- fp = fopen (source_path, "w");
- if (G_LIKELY (fp != NULL))
- {
- g_fprintf (fp, _("The location and the format of the autostart directory has changed.\n"
- "The new location is\n"
- "\n"
- " %s\n"
- "\n"
- "where you can place .desktop files to, that describe the applications\n"
- "to start when you login to your Xfce desktop. The files in your old\n"
- "autostart directory have been successfully migrated to the new\n"
- "location.\n"
- "You should delete this directory now.\n"), target);
- fclose (fp);
- }
-
- g_free (target);
- }
-
- g_dir_close (dp);
- }
-}
-
-
-
-static gint
-xfsm_startup_autostart_xdg (XfsmManager *manager,
- gboolean start_at_spi)
-{
- const gchar *try_exec;
- const gchar *type;
- const gchar *exec;
- gboolean startup_notify;
- gboolean terminal;
- gboolean skip;
- GError *error = NULL;
- XfceRc *rc;
- gchar **files;
- gchar **only_show_in;
- gchar **not_show_in;
- gint started = 0;
- gint n, m;
- gchar *filename;
- const gchar *pattern;
-
- /* migrate the old autostart location (if still present) */
- xfsm_startup_autostart_migrate ();
-
- /* pattern for only at-spi desktop files or everything */
- if (start_at_spi)
- pattern = "autostart/at-spi-*.desktop";
- else
- pattern = "autostart/*.desktop";
-
- files = xfce_resource_match (XFCE_RESOURCE_CONFIG, pattern, TRUE);
- for (n = 0; files[n] != NULL; ++n)
- {
- rc = xfce_rc_config_open (XFCE_RESOURCE_CONFIG, files[n], TRUE);
- if (G_UNLIKELY (rc == NULL))
- continue;
-
- xfce_rc_set_group (rc, "Desktop Entry");
-
- /* check the Hidden key */
- skip = xfce_rc_read_bool_entry (rc, "Hidden", FALSE);
- if (G_LIKELY (!skip))
- {
- xfsm_verbose("hidden set\n");
-
- if (xfce_rc_read_bool_entry (rc, "X-XFCE-Autostart-Override", FALSE))
- {
- /* override the OnlyShowIn check */
- skip = FALSE;
- xfsm_verbose ("X-XFCE-Autostart-Override set, launching\n");
- }
- else
- {
- /* check the OnlyShowIn setting */
- only_show_in = xfce_rc_read_list_entry (rc, "OnlyShowIn", ";");
- if (G_UNLIKELY (only_show_in != NULL))
- {
- /* check if "XFCE" is specified */
- for (m = 0, skip = TRUE; only_show_in[m] != NULL; ++m)
- {
- if (g_ascii_strcasecmp (only_show_in[m], "XFCE") == 0)
- {
- skip = FALSE;
- xfsm_verbose ("only show in XFCE set, launching\n");
- break;
- }
- }
-
- g_strfreev (only_show_in);
- }
- }
-
- /* check the NotShowIn setting */
- not_show_in = xfce_rc_read_list_entry (rc, "NotShowIn", ";");
- if (G_UNLIKELY (not_show_in != NULL))
- {
- /* check if "Xfce" is not specified */
- for (m = 0; not_show_in[m] != NULL; ++m)
- if (g_ascii_strcasecmp (not_show_in[m], "XFCE") == 0)
- {
- skip = TRUE;
- xfsm_verbose ("NotShowIn Xfce set, skipping\n");
- break;
- }
-
- g_strfreev (not_show_in);
- }
-
- /* skip at-spi launchers if not in at-spi mode or don't skip
- * them no matter what the OnlyShowIn key says if only
- * launching at-spi */
- filename = g_path_get_basename (files[n]);
- if (g_str_has_prefix (filename, "at-spi-"))
- {
- skip = !start_at_spi;
- xfsm_verbose ("start_at_spi (a11y support), %s\n", skip ? "skipping" : "showing");
- }
- g_free (filename);
- }
-
- /* check the "Type" key */
- type = xfce_rc_read_entry (rc, "Type", NULL);
- if (G_UNLIKELY (!skip && type != NULL && g_ascii_strcasecmp (type, "Application") != 0))
- {
- skip = TRUE;
- xfsm_verbose ("Type == Application, skipping\n");
- }
-
- /* check the "TryExec" key */
- try_exec = xfce_rc_read_entry (rc, "TryExec", NULL);
- if (G_UNLIKELY (!skip && try_exec != NULL))
- {
- skip = !xfsm_check_valid_exec (try_exec);
- if (skip)
- xfsm_verbose ("TryExec set and xfsm_check_valid_exec failed, skipping\n");
- }
-
- /* execute the item */
- exec = xfce_rc_read_entry (rc, "Exec", NULL);
- if (G_LIKELY (!skip && exec != NULL))
- {
- /* query launch parameters */
- startup_notify = xfce_rc_read_bool_entry (rc, "StartupNotify", FALSE);
- terminal = xfce_rc_read_bool_entry (rc, "Terminal", FALSE);
-
- /* try to launch the command */
- xfsm_verbose ("Autostart: running command \"%s\"\n", exec);
- if (!xfce_spawn_command_line_on_screen (gdk_screen_get_default (),
- exec,
- terminal,
- startup_notify,
- &error))
- {
- g_warning ("Unable to launch \"%s\" (specified by %s): %s", exec, files[n], error->message);
- xfsm_verbose ("Unable to launch \"%s\" (specified by %s): %s\n", exec, files[n], error->message);
- g_error_free (error);
- error = NULL;
- }
- else
- {
- ++started;
- }
- }
-
- /* cleanup */
- xfce_rc_close (rc);
- }
- g_strfreev (files);
-
- return started;
-}
-
-
-
static void
xfsm_startup_autostart (XfsmManager *manager)
{
gint n;
- n = xfsm_startup_autostart_xdg (manager, FALSE);
+ n = xfsm_startup_autostart_xdg (FALSE);
if (n > 0)
{
@@ -870,7 +578,7 @@ xfsm_startup_at (XfsmManager *manager)
gint n, i;
/* start at-spi-dbus-bus and/or at-spi-registryd */
- n = xfsm_startup_autostart_xdg (manager, TRUE);
+ n = xfsm_startup_autostart_xdg (TRUE);
if (n > 0)
{