Updating branch refs/heads/master to a48528137201c54eb1653e1ea835973653bca564 (commit) from 65ef5662c844a5b01b7c9b3ca438d88abe1bd0e1 (commit)
commit a48528137201c54eb1653e1ea835973653bca564 Author: Mike Massonnet <mmasson...@gmail.com> Date: Tue Dec 1 22:05:01 2009 +0100 Add desktop file and autostart code for standalone app ChangeLog | 4 + Makefile.am | 5 + panel-plugin/Makefile.am | 26 ++++-- panel-plugin/main-status-icon.vala | 5 +- panel-plugin/xfce-autostart.c | 126 +++++++++++++++++++++++++ panel-plugin/{color.h => xfce-autostart.h} | 27 ++---- panel-plugin/xfce-autostart.vapi | 5 + panel-plugin/xfce4-notes-autostart.desktop.in | 10 ++ xfce4-notes.desktop.in | 12 +++ 9 files changed, 193 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6661699..6fc2d0a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-12-01 Mike Massonnet <mmasson...@xfce.org> +Add desktop file and autostart code for standalone app + +2009-12-01 Mike Massonnet <mmasson...@xfce.org> + Do as for Clipman, let the plugin be a standalone app * panel-plugin/Makefile.am: - Update Makefile to build both plugin and binary C. diff --git a/Makefile.am b/Makefile.am index 9dd8263..1cf03e2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,6 +8,11 @@ SUBDIRS = \ distclean-local: rm -rf *.cache *~ +desktopdir = $(datadir)/applications +desktop_in_files = xfce4-notes.desktop.in +desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) +...@intltool_desktop_rule@ + EXTRA_DIST = \ AUTHORS \ ChangeLog \ diff --git a/panel-plugin/Makefile.am b/panel-plugin/Makefile.am index 0a3057f..44fb002 100644 --- a/panel-plugin/Makefile.am +++ b/panel-plugin/Makefile.am @@ -52,7 +52,8 @@ xfce4_notes_settings_LDADD = \ notes_VAPISOURCES = \ config.vapi \ color.vapi \ - popup.vapi + popup.vapi \ + xfce-autostart.vapi notes_VALASOURCES = \ hypertextview.vala \ @@ -73,17 +74,17 @@ notes_status_icon_VALABUILTSOURCES = $(notes_status_icon_VALASOURCES:.vala=.c) if MAINTAINER_MODE if HAVE_LIBXFCE4PANEL47 DEFINES=-D HAVE_LIBXFCE4PANEL47 -PACKAGES=--pkg=libxfcegui4-1.0 --pkg=gtk+-2.0 +PACKAGES=--pkg=config --pkg=color --pkg=popup --pkg=libxfcegui4-1.0 --pkg=gtk+-2.0 else -PACKAGES=--pkg=gtk+-2.0 +PACKAGES=--pkg=config --pkg=color --pkg=popup --pkg=gtk+-2.0 endif BUILT_SOURCES = vala.stamp vala.stamp: $(notes_VALASOURCES) $(notes_panel_plugin_VALASOURCES) $(notes_status_icon_VALASOURCES) - $(VALAC) $(DEFINES) --vapidir=$(srcdir) --pkg=config --pkg=color --pkg=popup \ - --pkg=libxfconf-0 $(PACKAGES) --pkg=libxfce4panel-1.0 \ + $(VALAC) $(DEFINES) --vapidir=$(srcdir) $(PACKAGES) \ + --pkg=libxfconf-0 --pkg=libxfce4panel-1.0 \ $(notes_VALASOURCES) $(notes_panel_plugin_VALASOURCES) -C - $(VALAC) $(DEFINES) --vapidir=$(srcdir) --pkg=config --pkg=color --pkg=popup \ - --pkg=libxfconf-0 --pkg=libxfce4util-1.0 $(PACKAGES) \ + $(VALAC) $(DEFINES) --vapidir=$(srcdir) $(PACKAGES) \ + --pkg=xfce-autostart --pkg=libxfconf-0 --pkg=libxfce4util-1.0 \ $(notes_VALASOURCES) $(notes_status_icon_VALASOURCES) -C touch $@ endif @@ -159,6 +160,8 @@ xfce4_notes_SOURCES = \ color.h \ popup.c \ popup.h \ + xfce-autostart.c \ + xfce-autostart.h \ $(notes_VALABUILTSOURCES) \ $(notes_status_icon_VALABUILTSOURCES) @@ -198,6 +201,15 @@ endif $< > $@ # +# Autostart file +# + +autostartdir = $(sysconfdir)/xdg/autostart +autostart_in_files = xfce4-notes-autostart.desktop.in +autostart_DATA = $(autostart_in_files:.desktop.in=.desktop) +...@intltool_desktop_rule@ + +# # Extra # diff --git a/panel-plugin/main-status-icon.vala b/panel-plugin/main-status-icon.vala index 66dd058..fd84021 100644 --- a/panel-plugin/main-status-icon.vala +++ b/panel-plugin/main-status-icon.vala @@ -116,7 +116,7 @@ public class Notes : GLib.Object { mi = new Gtk.ImageMenuItem.from_stock (Gtk.STOCK_REMOVE, null); mi.activate += () => { - // Set autostart file hidden + xfce.autosta...@set ("xfce4-notes-autostart", "xfce4-notes", true); Gtk.main_quit (); }; menu.append (mi); @@ -130,8 +130,7 @@ public class Notes : GLib.Object { Gtk.init (ref args); GLib.Environment.set_application_name (_("Notes")); var notes = new Notes (); - // Install initial autostart file - //Xfce.Autostart.set ("Notes", "xfce4-notes", true); + xfce.autosta...@set ("xfce4-notes-autostart", "xfce4-notes", false); Gtk.main (); notes = null; return 0; diff --git a/panel-plugin/xfce-autostart.c b/panel-plugin/xfce-autostart.c new file mode 100644 index 0000000..2183de9 --- /dev/null +++ b/panel-plugin/xfce-autostart.c @@ -0,0 +1,126 @@ +/* + * xfce-autostart - convenience functions to handle autostart files + * Copyright (C) 2009 Mike Massonnet <mmasson...@xfce.org> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <glib.h> +#include <libxfce4util/libxfce4util.h> + +void xfce_autostart_set (gchar *name, + gchar *exec, + gboolean hidden); +void xfce_autostart_set_full (gchar *name, + gchar *exec, + gboolean hidden, + gboolean terminal, + gchar *comment, + gchar *icon); + +/** + * xfce_autostart_set: + * @name: name of the autostart also used for the filename + * @exec: command to execute + * @hidden: set to FALSE to make the file visible and enable the autostart + * + * Simple version of xfce_autostart_set_full() that passes FALSE to @terminal + * and %NULL to comment and icon. See xfce_autostart_set_full() for more info. + */ +void +xfce_autostart_set (gchar *name, + gchar *exec, + gboolean hidden) +{ + xfce_autostart_set_full (name, exec, hidden, FALSE, NULL, NULL); +} + +/** + * xfce_autostart_set_full: + * @name: name of the autostart also used for the filename + * @exec: command to execute + * @hidden: set to FALSE to make the file visible and enable the autostart + * @terminal: set to TRUE to run the program within a terminal + * @comment: comment/description of the program + * @icon: icon name + * + * Convenience function to install and modify an autostart file within the home + * directory of the user. If none previously exists and an autostart file is + * found on the system it will first be copied then modified otherwise it will + * be created. + */ +void +xfce_autostart_set_full (gchar *name, + gchar *exec, + gboolean hidden, + gboolean terminal, + gchar *comment, + gchar *icon) +{ + gchar *relpath = NULL; + gchar *usrfile = NULL; + gchar *sysfile = NULL; + GKeyFile *keyfile; + gchar *data; + + g_return_if_fail (G_LIKELY (name != NULL)); + g_return_if_fail (G_LIKELY (exec != NULL)); + + keyfile = g_key_file_new (); + + relpath = g_strdup_printf ("autostart/%s.desktop", name); + usrfile = g_strdup_printf ("%s/%s", g_get_user_config_dir (), relpath); + + if (g_file_test (usrfile, G_FILE_TEST_EXISTS)) + { + TRACE ("User file exists, load it"); + g_key_file_load_from_file (keyfile, usrfile, G_KEY_FILE_KEEP_TRANSLATIONS, NULL); + } + else + { + TRACE ("User file doesn't exist, lookup for a system-wide file"); + sysfile = xfce_resource_lookup (XFCE_RESOURCE_CONFIG, relpath); + if (sysfile != NULL) + { + TRACE ("System-wide file found, load it"); + g_key_file_load_from_file (keyfile, sysfile, G_KEY_FILE_KEEP_TRANSLATIONS, NULL); + } + else + { + TRACE ("No file found, iniate one"); + g_key_file_set_string (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TYPE, + G_KEY_FILE_DESKTOP_TYPE_APPLICATION); + g_key_file_set_string (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_NAME, name); + } + } + + g_key_file_set_string (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_EXEC, exec); + g_key_file_set_boolean (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_HIDDEN, hidden); + g_key_file_set_boolean (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_TERMINAL, terminal); + if (comment != NULL) + g_key_file_set_string (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_COMMENT, comment); + if (icon != NULL) + g_key_file_set_string (keyfile, G_KEY_FILE_DESKTOP_GROUP, G_KEY_FILE_DESKTOP_KEY_ICON, icon); + + data = g_key_file_to_data (keyfile, NULL, NULL); + g_file_set_contents (usrfile, data, -1, NULL); + TRACE ("File updated:\n%s", data); + + g_free (relpath); + g_free (usrfile); + g_free (sysfile); + g_free (data); +} + diff --git a/panel-plugin/color.h b/panel-plugin/xfce-autostart.h similarity index 56% copy from panel-plugin/color.h copy to panel-plugin/xfce-autostart.h index 53af846..41d843f 100644 --- a/panel-plugin/color.h +++ b/panel-plugin/xfce-autostart.h @@ -1,5 +1,5 @@ /* - * Notes - panel plugin for Xfce Desktop Environment + * xfce-autostart - convenience functions to handle autostart files * Copyright (C) 2009 Mike Massonnet <mmasson...@xfce.org> * * This program is free software; you can redistribute it and/or modify @@ -17,22 +17,15 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef COLOR_H -#define COLOR_H - #include <glib.h> -#include <gdk/gdk.h> -#include <gtk/gtk.h> - -void color_set_background (const gchar *background); -void __gdk_color_contrast (GdkColor *color, - gdouble contrast); -#if !GTK_CHECK_VERSION (2,12,0) -gchar * gdk_color_to_string (const GdkColor *color); -#endif -#if !GTK_CHECK_VERSION (2,14,0) -GtkWidget* gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel); -#endif -#endif +void xfce_autostart_set (gchar *name, + gchar *exec, + gboolean hidden); +void xfce_autostart_set_full (gchar *name, + gchar *exec, + gboolean hidden, + gboolean terminal, + gchar *comment, + gchar *icon); diff --git a/panel-plugin/xfce-autostart.vapi b/panel-plugin/xfce-autostart.vapi new file mode 100644 index 0000000..bf12829 --- /dev/null +++ b/panel-plugin/xfce-autostart.vapi @@ -0,0 +1,5 @@ +[CCode (cheader_filename = "popup.h")] +namespace Xfce.Autostart { + public static void @set (string name, string exec, bool hidden); + public static void set_full (string name, string exec, bool hidden, bool terminal, string? comment, string? icon); +} diff --git a/panel-plugin/xfce4-notes-autostart.desktop.in b/panel-plugin/xfce4-notes-autostart.desktop.in new file mode 100644 index 0000000..73371f1 --- /dev/null +++ b/panel-plugin/xfce4-notes-autostart.desktop.in @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +_Name=Notes +_Comment=Ideal for your quick notes +TryExec=xfce4-notes +Exec=xfce4-notes +Icon=xfce4-notes-plugin +OnlyShowIn=XFCE;GNOME; +Terminal=false +Hidden=true diff --git a/xfce4-notes.desktop.in b/xfce4-notes.desktop.in new file mode 100644 index 0000000..abe9b6b --- /dev/null +++ b/xfce4-notes.desktop.in @@ -0,0 +1,12 @@ +[Desktop Entry] +Version=1.0 +Type=Application +_Name=Notes +_Comment=Ideal for your quick notes +TryExec=xfce4-notes +Exec=xfce4-notes +Icon=xfce4-notes-plugin +Terminal=false +Categories=GTK;Utility;TrayIcon; +OnlyShowIn=XFCE;GNOME; +StartupNotify=false _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits