diff -Naur ../libexo-without-helpers/Makefile.am ./Makefile.am --- ../libexo-without-helpers/Makefile.am Sun Dec 18 12:14:19 2005 +++ ./Makefile.am Mon Jan 30 19:23:56 2006 @@ -5,7 +5,10 @@ SUBDIRS = \ exo \ exo-csource \ + exo-helper \ + exo-open \ docs \ + icons \ po \ $(PYTHON_SUBDIR) \ tests diff -Naur ../libexo-without-helpers/configure.in.in ./configure.in.in --- ../libexo-without-helpers/configure.in.in Wed Jan 25 22:35:00 2006 +++ ./configure.in.in Mon Jan 30 19:23:57 2006 @@ -73,6 +73,7 @@ AM_PROG_AS() AC_PROG_CC() AC_PROG_INSTALL() +AC_PROG_INTLTOOL([0.31], [no-xml]) AC_PROG_LIBTOOL() AC_CHECK_PROGS([PERL], [perl5 perl]) @@ -81,8 +82,13 @@ dnl *************************************** AC_HEADER_STDC() AC_CHECK_HEADERS([assert.h errno.h fcntl.h libintl.h locale.h math.h md5.h \ - string.h sys/resource.h sys/stat.h sys/time.h sys/types.h \ - time.h]) + regex.h string.h sys/resource.h sys/stat.h sys/time.h \ + sys/types.h time.h]) + +dnl ************************************ +dnl *** Check for standard functions *** +dnl ************************************ +AC_CHECK_FUNCS([regexec]) dnl ****************************************** dnl *** Check for Message Digest functions *** @@ -99,9 +105,15 @@ dnl *********************************** dnl *** Check for required packages *** dnl *********************************** -XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.4.0]) -XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.4.0]) -XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.2.0]) +XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.6.4]) +XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.6.0]) +XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.2.2]) + +dnl ********************************************* +dnl *** Check for xfce-mcs-manager (optional) *** +dnl ********************************************* +XDT_CHECK_OPTIONAL_PACKAGE([XFCE_MCS_MANAGER], [xfce-mcs-manager], [4.2.2], + [mcs-plugin], [xfce-mcs-manager], [yes]) dnl ************************* dnl *** Check for gtk-doc *** @@ -235,6 +247,11 @@ exo/exo-0.3.pc exo/exo-config.h exo-csource/Makefile +exo-helper/Makefile +exo-helper/helpers/Makefile +exo-open/Makefile +icons/Makefile +icons/48x48/Makefile po/Makefile.in python/Makefile python/examples/Makefile diff -Naur ../libexo-without-helpers/exo/Makefile.am ./exo/Makefile.am --- ../libexo-without-helpers/exo/Makefile.am Mon Dec 5 17:46:54 2005 +++ ./exo/Makefile.am Mon Jan 30 19:23:54 2006 @@ -5,6 +5,8 @@ -DEXO_API_SUBJECT_TO_CHANGE \ -DEXO_COMPILATION \ -DG_LOG_DOMAIN=\"exo\" \ + -DLIBEXECDIR=\"$(libexecdir)\" \ + -DLIBEXO_VERSION_API=\"$(LIBEXO_VERSION_API)\" \ -DPACKAGE_LOCALE_DIR=\"$(localedir)\" lib_LTLIBRARIES = libexo-0.3.la @@ -13,6 +15,7 @@ exo-binding.h \ exo-cell-renderer-ellipsized-text.h \ exo-ellipsized-label.h \ + exo-execute.h \ exo-gdk-pixbuf-extensions.h \ exo-gtk-extensions.h \ exo-gobject-extensions.h \ @@ -25,6 +28,7 @@ exo-toolbars-editor-dialog.h \ exo-toolbars-model.h \ exo-toolbars-view.h \ + exo-url.h \ exo-utils.h \ exo-wrap-table.h \ exo-xsession-client.h @@ -55,6 +59,7 @@ exo-cell-renderer-ellipsized-text.c \ exo-config.c \ exo-ellipsized-label.c \ + exo-execute.c \ exo-gdk-pixbuf-extensions.c \ exo-gtk-extensions.c \ exo-gobject-extensions.c \ @@ -71,6 +76,7 @@ exo-toolbars-private.c \ exo-toolbars-private.h \ exo-toolbars-view.c \ + exo-url.c \ exo-utils.c \ exo-wrap-table.c \ exo-xsession-client.c diff -Naur ../libexo-without-helpers/exo/exo-execute.c ./exo/exo-execute.c --- ../libexo-without-helpers/exo/exo-execute.c Thu Jan 1 01:00:00 1970 +++ ./exo/exo-execute.c Mon Jan 30 19:23:54 2006 @@ -0,0 +1,205 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + + + +/** + * exo_execute_preferred_application: + * @category : the category of the preferred application to launch. + * @parameter : additional parameter to pass to the preferred application + * (i.e. an URL to pass to the preferred browser) or %NULL + * to pass no parameter. + * @working_directory : path to the directory in which to execute the + * preferred application for @category. + * @envp : child's environment, or %NULL to inherit parent's. + * @error : return location for errors or %NULL. + * + * Convenience wrapper to exo_execute_preferred_application_on_screen(), which + * runs the preferred application for @category on the default #GdkScreen. + * + * Note that even if this method returns %TRUE there's no warranty that + * the preferred application for @category was run successfully, because + * of the way the helper framework is implemented. But you can be sure + * that if the execution fails at a later stage, the library will popup + * an error dialog to inform the user that the execution failed. + * + * Return value: %TRUE on success, else %FALSE. + **/ +gboolean +exo_execute_preferred_application (const gchar *category, + const gchar *parameter, + const gchar *working_directory, + gchar **envp, + GError **error) +{ + g_return_val_if_fail (category != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return exo_execute_preferred_application_on_screen (category, parameter, working_directory, envp, gdk_screen_get_default (), error); +} + + + +/** + * exo_execute_preferred_application_on_screen: + * @category : the category of the preferred application to launch. + * @parameter : additional parameter to pass to the preferred application + * (i.e. an URL to pass to the preferred browser) or %NULL + * to pass no parameter. + * @working_directory : path to the directory in which to execute the + * preferred application for @category. + * @envp : child's environment, or %NULL to inherit parent's. + * @screen : the #GdkScreen on which to run the preferred + * application for @category. + * @error : return location for errors or %NULL. + * + * Launches the preferred application for the given @category with the + * @parameter on @screen in the specified @working_directory. + * + * libexo currently supports the following categories: %"WebBrowser", + * %"MailReader" and %"TerminalEmulator". If you specify an invalid + * @category here, the execution will fail at a later stage and the + * user will be presented with an error dialog. + * + * Note that even if this method returns %TRUE there's no warranty that + * the preferred application for @category was run successfully, because + * of the way the helper framework is implemented. But you can be sure + * that if the execution fails at a later stage, the library will popup + * an error dialog to inform the user that the execution failed. + * + * Return value: %TRUE on success, else %FALSE. + **/ +gboolean +exo_execute_preferred_application_on_screen (const gchar *category, + const gchar *parameter, + const gchar *working_directory, + gchar **envp, + GdkScreen *screen, + GError **error) +{ + gchar *argv[5]; + gint argc = 0; + + g_return_val_if_fail (category != NULL, FALSE); + g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + /* generate the argument vector */ + argv[argc++] = LIBEXECDIR "/exo-helper-" LIBEXO_VERSION_API; + argv[argc++] = "--launch"; + argv[argc++] = (gchar *) category; + + /* append parameter if given */ + if (G_LIKELY (parameter != NULL)) + argv[argc++] = (gchar *) parameter; + + /* null terminate the argument vector */ + argv[argc] = NULL; + + /* launch the command */ + return gdk_spawn_on_screen (screen, working_directory, argv, envp, 0, NULL, NULL, NULL, error); +} + + + +/** + * exo_execute_terminal_shell: + * @command_line : shell command line to execute. + * @working_directory : path to the directory in which to execute @command_line + * or %NULL to use the current working directory. + * @envp : child's environment, or %NULL to inherit parent's. + * @error : return location for errors or %NULL. + * + * Convenience wrapper to exo_execute_terminal_shell_on_screen(), which + * executes the @command_line on the default #GdkScreen. + * + * Note that even if this method returns %TRUE there's no warranty that + * the @command_line was run successfully, because of the way the helper + * framework is implemented. But you can be sure that if the execution + * fails at a later stage, the library will popup an error dialog to + * inform the user that the execution failed. + * + * Return value: %TRUE on success, else %FALSE. + **/ +gboolean +exo_execute_terminal_shell (const gchar *command_line, + const gchar *working_directory, + gchar **envp, + GError **error) +{ + g_return_val_if_fail (command_line != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return exo_execute_terminal_shell_on_screen (command_line, working_directory, envp, gdk_screen_get_default (), error); +} + + + +/** + * exo_execute_terminal_shell_on_screen: + * @command_line : shell command line to execute. + * @working_directory : path to the directory in which to execute @command_line + * or %NULL to use the current working directory. + * @envp : child's environment, or %NULL to inherit parent's. + * @screen : the #GdkScreen on which to run the @command_line. + * @error : return location for errors or %NULL. + * + * Executes @command_line in the default terminal emulator on the specified + * @screen. + * + * If no preferred terminal emulator was chosen by the user so far and + * no sane fallback could be located, the user will be presented with + * the preferred application chooser dialog, which prompts to choose + * a default terminal emulator, and the @command_line will be run + * afterwards using the new default. + * + * Note that even if this method returns %TRUE there's no warranty that + * the @command_line was run successfully, because of the way the helper + * framework is implemented. But you can be sure that if the execution + * fails at a later stage, the library will popup an error dialog to + * inform the user that the execution failed. + * + * Return value: %TRUE on success, else %FALSE. + **/ +gboolean +exo_execute_terminal_shell_on_screen (const gchar *command_line, + const gchar *working_directory, + gchar **envp, + GdkScreen *screen, + GError **error) +{ + g_return_val_if_fail (command_line != NULL, FALSE); + g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return exo_execute_preferred_application_on_screen ("TerminalEmulator", command_line, working_directory, envp, screen, error); +} + + + +#define __EXO_EXECUTE_C__ +#include diff -Naur ../libexo-without-helpers/exo/exo-execute.h ./exo/exo-execute.h --- ../libexo-without-helpers/exo/exo-execute.h Thu Jan 1 01:00:00 1970 +++ ./exo/exo-execute.h Mon Jan 30 19:23:54 2006 @@ -0,0 +1,56 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#if !defined (EXO_INSIDE_EXO_H) && !defined (EXO_COMPILATION) +#error "Only can be included directly, this file may disappear or change contents." +#endif + +#ifndef __EXO_EXECUTE_H__ +#define __EXO_EXECUTE_H__ + +#include + +G_BEGIN_DECLS; + +gboolean exo_execute_preferred_application (const gchar *category, + const gchar *parameter, + const gchar *working_directory, + gchar **envp, + GError **error); +gboolean exo_execute_preferred_application_on_screen (const gchar *category, + const gchar *parameter, + const gchar *working_directory, + gchar **envp, + GdkScreen *screen, + GError **error); + +gboolean exo_execute_terminal_shell (const gchar *command_line, + const gchar *working_directory, + gchar **envp, + GError **error); +gboolean exo_execute_terminal_shell_on_screen (const gchar *command_line, + const gchar *working_directory, + gchar **envp, + GdkScreen *screen, + GError **error); + +G_END_DECLS; + +#endif /* !__EXO_EXECUTE_H__ */ diff -Naur ../libexo-without-helpers/exo/exo-url.c ./exo/exo-url.c --- ../libexo-without-helpers/exo/exo-url.c Thu Jan 1 01:00:00 1970 +++ ./exo/exo-url.c Mon Jan 30 19:23:54 2006 @@ -0,0 +1,185 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_MEMORY_H +#include +#endif +#ifdef HAVE_REGEX_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include +#include +#include +#include + + + +/* regular expressions for exo_url_show_on_screen() */ +#define USERCHARS "-A-Za-z0-9" +#define PASSCHARS "-A-Za-z0-9,?;.:/!%$^*&~\"#'" +#define HOSTCHARS "-A-Za-z0-9" +#define USER "[" USERCHARS "]+(:["PASSCHARS "]+)?" +#define MATCH_BROWSER1 "((file|https?|ftps?)://(" USER "@)?)[" HOSTCHARS ".]+(:[0-9]+)?" \ + "(/[-A-Za-z0-9_$.+!*(),;:@&=?/~#%]*[^]'.}>) \t\r\n,\\\"])?" +#define MATCH_BROWSER2 "(www|ftp)[" HOSTCHARS "]*\\.[" HOSTCHARS ".]+(:[0-9]+)?" \ + "(/[-A-Za-z0-9_$.+!*(),;:@&=?/~#%]*[^]'.}>) \t\r\n,\\\"])?" +#if !defined(__GLIBC__) +#define MATCH_MAILER "(mailto:)?[a-z0-9][a-z0-9.-]*@[a-z0-9][a-z0-9-]*(\\.[a-z0-9][a-z0-9-]*)+" +#else +#define MATCH_MAILER "\\<(mailto:)?[a-z0-9][a-z0-9.-]*@[a-z0-9][a-z0-9-]*(\\.[a-z0-9][a-z0-9-]*)+\\>" +#endif + + + +/** + * exo_url_error_quark: + * + * Returns the #GError domain used for #ExoUrlErrors + * returned from exo_url_show() and exo_url_show_on_screen(). + * + * Return value: the #GError domain used for #ExoUrlErrors. + **/ +GQuark +exo_url_error_quark (void) +{ + static GQuark quark = 0; + + if (G_UNLIKELY (quark == 0)) + quark = g_quark_from_static_string ("exo-url-error-quark"); + + return quark; +} + + + +/** + * exo_url_show: + * @url : the URL that should be shown. + * @envp : child environment for the url handler or + * %NULL to inherit parent's environment. + * @error : return location for errors or %NULL. + * + * Convenience wrapper to exo_url_show_on_screen(), which + * shows the @url on the default #GdkScreen. + * + * Return value: %TRUE on success, %FALSE on error. + **/ +gboolean +exo_url_show (const gchar *url, + gchar **envp, + GError **error) +{ + g_return_val_if_fail (url != NULL, FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + return exo_url_show_on_screen (url, envp, gdk_screen_get_default (), error); +} + + + +static gboolean +match (const gchar *pattern, const gchar *url) +{ +#ifdef HAVE_REGEXEC + regex_t regex; + gint result = -1; + + if (regcomp (®ex, pattern, REG_EXTENDED) == 0) + { + result = regexec (®ex, url, 0, NULL, 0); + regfree (®ex); + } + + return (result == 0); +#else +#error "No POSIX regular expressions available, please report this to thunar-dev@xfce.org" +#endif +} + + + +/** + * exo_url_show_on_screen: + * @url : the URL that should be shown. + * @envp : child environment for the url handler or + * %NULL to inherit parent's environment. + * @screen : the #GdkScreen on which to open the + * URL handler for @url. + * @error : return location for errors or %NULL. + * + * Tries to find a suitable handler for @url in the list of + * preferred application categories and runs that handler + * with @url on @screen. + * + * Return value: %TRUE on success, %FALSE on error. + **/ +gboolean +exo_url_show_on_screen (const gchar *url, + gchar **envp, + GdkScreen *screen, + GError **error) +{ + const gchar *category; + + g_return_val_if_fail (url != NULL, FALSE); + g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + /* now, let's see what we have here */ + if (match (MATCH_BROWSER1, url) || match (MATCH_BROWSER2, url)) + { + category = "WebBrowser"; + } + else if (match (MATCH_MAILER, url)) + { + /* ignore mailto: prefix, as not all mailers can handle it */ + if (g_str_has_prefix (url, "mailto:")) + url += strlen ("mailto:"); + category = "MailReader"; + } + else + { + /* be sure to initialize i18n support first, + * so we get a translated error message. + */ + _exo_i18n_init (); + + /* and prepare the error */ + g_set_error (error, EXO_URL_ERROR, EXO_URL_ERROR_NOT_SUPPORTED, + _("The URL `%s' is not supported"), url); + return FALSE; + } + + /* oki doki then, let's open it */ + return exo_execute_preferred_application_on_screen (category, url, NULL, envp, screen, error); +} + + + +#define __EXO_URL_C__ +#include diff -Naur ../libexo-without-helpers/exo/exo-url.h ./exo/exo-url.h --- ../libexo-without-helpers/exo/exo-url.h Thu Jan 1 01:00:00 1970 +++ ./exo/exo-url.h Mon Jan 30 19:23:54 2006 @@ -0,0 +1,58 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#if !defined (EXO_INSIDE_EXO_H) && !defined (EXO_COMPILATION) +#error "Only can be included directly, this file may disappear or change contents." +#endif + +#ifndef __EXO_URL_H__ +#define __EXO_URL_H__ + +#include + +G_BEGIN_DECLS; + +#define EXO_URL_ERROR (exo_url_error_quark ()) +GQuark exo_url_error_quark (void) G_GNUC_CONST; + +/** + * ExoUrlError: + * @EXO_URL_ERROR_NOT_SUPPORTED : a given URL is not supported. + * + * The errors that can be returned due to bad parameters being + * passed to exo_url_show() or exo_url_show_on_screen(). + **/ +typedef enum /*< skip >*/ +{ + EXO_URL_ERROR_NOT_SUPPORTED, +} ExoUrlError; + +gboolean exo_url_show (const gchar *url, + gchar **envp, + GError **error); + +gboolean exo_url_show_on_screen (const gchar *url, + gchar **envp, + GdkScreen *screen, + GError **error); + +G_END_DECLS; + +#endif /* !__EXO_URL_H__ */ diff -Naur ../libexo-without-helpers/exo/exo.h ./exo/exo.h --- ../libexo-without-helpers/exo/exo.h Wed Jan 25 22:35:00 2006 +++ ./exo/exo.h Mon Jan 30 19:23:53 2006 @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ #include #include #include +#include #include #include #include diff -Naur ../libexo-without-helpers/exo/exo.symbols ./exo/exo.symbols --- ../libexo-without-helpers/exo/exo.symbols Tue Dec 13 17:11:25 2005 +++ ./exo/exo.symbols Mon Jan 30 19:23:53 2006 @@ -86,6 +86,16 @@ #endif #endif +/* exo-execute functions */ +#if IN_HEADER(__EXO_EXECUTE_H__) +#if IN_SOURCE(__EXO_EXECUTE_C__) +exo_execute_preferred_application +exo_execute_preferred_application_on_screen +exo_execute_terminal_shell +exo_execute_terminal_shell_on_screen +#endif +#endif + /* exo-gdk-pixbuf-extensions functions */ #if IN_HEADER(__EXO_GDK_PIXBUF_EXTENSIONS_H__) #if IN_SOURCE(__EXO_GDK_PIXBUF_EXTENSIONS_C__) @@ -303,6 +313,14 @@ exo_toolbars_view_set_model exo_toolbars_view_get_ui_manager exo_toolbars_view_set_ui_manager +#endif +#endif + +#if IN_HEADER(__EXO_URL_H__) +#if IN_SOURCE(__EXO_URL_C__) +exo_url_error_quark G_GNUC_CONST +exo_url_show +exo_url_show_on_screen #endif #endif diff -Naur ../libexo-without-helpers/exo-helper/Makefile.am ./exo-helper/Makefile.am --- ../libexo-without-helpers/exo-helper/Makefile.am Thu Jan 1 01:00:00 1970 +++ ./exo-helper/Makefile.am Mon Jan 30 19:23:50 2006 @@ -0,0 +1,143 @@ +# $Id$ + +SUBDIRS = \ + helpers + +INCLUDES = \ + -I$(top_srcdir) \ + -DBINDIR=\"$(bindir)\" \ + -DDATADIR=\"$(datadir)\" \ + -DEXO_API_SUBJECT_TO_CHANGE \ + -DG_LOG_DOMAIN=\"exo-helper\" \ + -DPACKAGE_LOCALE_DIR=\"$(localedir)\" + +libexec_PROGRAMS = \ + exo-helper-0.3 + +exo_helper_built_sources = \ + exo-helper-enum-types.c \ + exo-helper-enum-types.h + +exo_helper_headers = \ + exo-helper.h + +exo_helper_0_3_SOURCES = \ + $(exo_helper_built_sources) \ + $(exo_helper_headers) \ + exo-helper-chooser-dialog.c \ + exo-helper-chooser-dialog.h \ + exo-helper-chooser.c \ + exo-helper-chooser.h \ + exo-helper-launcher-dialog.c \ + exo-helper-launcher-dialog.h \ + exo-helper-utils.c \ + exo-helper-utils.h \ + exo-helper.c \ + main.c + +exo_helper_0_3_CFLAGS = \ + $(GTK_CFLAGS) \ + $(LIBXFCE4UTIL_CFLAGS) + +exo_helper_0_3_DEPENDENCIES = \ + $(top_builddir)/exo/libexo-$(LIBEXO_VERSION_MAJOR).$(LIBEXO_VERSION_MINOR).la + +exo_helper_0_3_LDADD = \ + $(GTK_LIBS) \ + $(LIBXFCE4UTIL_LIBS) \ + $(top_builddir)/exo/libexo-$(LIBEXO_VERSION_MAJOR).$(LIBEXO_VERSION_MINOR).la + +bin_SCRIPTS = \ + exo-preferred-applications + +exo-preferred-applications: Makefile $(srcdir)/exo-preferred-applications.in + sed \ + -e 's,@libexecdir\@,$(libexecdir),g' \ + -e 's,@LIBEXO_VERSION_MAJOR\@,$(LIBEXO_VERSION_MAJOR),g'\ + -e 's,@LIBEXO_VERSION_MINOR\@,$(LIBEXO_VERSION_MINOR),g'\ + < $(srcdir)/exo-preferred-applications.in \ + > exo-preferred-applications + +desktopdir = $(datadir)/applications +desktop_in_files = \ + exo-preferred-applications.desktop.in +desktop_DATA = \ + $(desktop_in_files:.desktop.in=.desktop) +@INTLTOOL_DESKTOP_RULE@ + +## +## Build MCS plugin if xfce-mcs-manager is present. The MCS plugin is +## really just a wrapper for exo-preferred-applications (remember, MCS +## must die!). +## +if HAVE_XFCE_MCS_MANAGER +pluginsdir = $(libdir)/xfce4/mcs-plugins +plugins_LTLIBRARIES = \ + exo-preferred-applications-settings.la + +exo_preferred_applications_settings_la_LDFLAGS = \ + -avoid-version \ + -module \ + -no-undefined + +exo_preferred_applications_settings_la_SOURCES = \ + exo-preferred-applications-settings.c + +exo_preferred_applications_settings_la_CFLAGS = \ + @XFCE_MCS_MANAGER_CFLAGS@ + +exo_preferred_applications_settings_la_LIBADD = \ + @XFCE_MCS_MANAGER_LIBS@ +endif + +## +## Rules to auto-generate built sources +## +## This is a bit tricky with automake, and non-trivial to implement. The +## rules below seem to work fine and don't seem to break the build, but +## they are only enabled in maintainer mode, so arbitrary users don't get +## trapped in automake's oddities. Therefore we ship the autogenerated +## files as part of the dist tarball. +## +if MAINTAINER_MODE +DISTCLEANFILES = \ + stamp-exo-helper-enum-types.h \ + $(exo_helper_built_sources) + +BUILT_SOURCES = \ + $(exo_helper_built_sources) + +exo-helper-enum-types.h: stamp-exo-helper-enum-types.h + @true +stamp-exo-helper-enum-types.h: $(exo_helper_headers) Makefile + ( cd $(srcdir) && glib-mkenums \ + --fhead "#ifndef __EXO_HELPER_ENUM_TYPES_H__\n#define __EXO_HELPER_ENUM_TYPES_H__\n#include \nG_BEGIN_DECLS\n" \ + --fprod "/* enumerations from \"@filename@\" */\n" \ + --vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define EXO_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ + --ftail "G_END_DECLS\n\n#endif /* !__EXO_HELPER_ENUM_TYPES_H__ */" \ + $(exo_helper_headers) ) >> xgen-eeth \ + && (cmp -s xgen-eeth exo-helper-enum-types.h || cp xgen-eeth exo-helper-enum-types.h ) \ + && rm -f xgen-eeth \ + && echo timestamp > $(@F) + +exo-helper-enum-types.c: $(exo_helper_headers) Makefile + ( cd $(srcdir) && glib-mkenums \ + --fhead "#undef GTK_DISABLE_DEPRECATED\n#define GTK_ENABLE_BROKEN\n#include \n" \ + --fprod "\n/* enumerations from \"@filename@\" */" \ + --vhead "GType\n@enum_name@_get_type (void)\n{\n\tstatic GType type = 0;\n\tif (type == 0) {\n\tstatic const G@Type@Value values[] = {"\ + --vprod "\t{ @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ + --vtail "\t{ 0, NULL, NULL }\n\t};\n\ttype = g_@type@_register_static (\"@EnumName@\", values);\n }\n\treturn type;\n}\n" \ + $(exo_helper_headers) ) >> xgen-eetc \ + && cp xgen-eetc exo-helper-enum-types.c \ + && rm -f xgen-eetc +endif + +CLEANFILES = \ + $(desktop_DATA) \ + exo-preferred-applications + +EXTRA_DIST = \ + $(desktop_in_files) \ + exo-preferred-applications.in + +# vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-chooser-dialog.c ./exo-helper/exo-helper-chooser-dialog.c --- ../libexo-without-helpers/exo-helper/exo-helper-chooser-dialog.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-chooser-dialog.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,285 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include + +#include +#include + + + +static void exo_helper_chooser_dialog_class_init (ExoHelperChooserDialogClass *klass); +static void exo_helper_chooser_dialog_init (ExoHelperChooserDialog *chooser_dialog); +static gboolean exo_helper_chooser_dialog_key_press_event (GtkWidget *widget, + GdkEventKey *event); + + + +struct _ExoHelperChooserDialogClass +{ + GtkDialogClass __parent__; +}; + +struct _ExoHelperChooserDialog +{ + GtkDialog __parent__; +}; + + + +static GObjectClass *exo_helper_chooser_dialog_parent_class; + + + +GType +exo_helper_chooser_dialog_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (ExoHelperChooserDialogClass), + NULL, + NULL, + (GClassInitFunc) exo_helper_chooser_dialog_class_init, + NULL, + NULL, + sizeof (ExoHelperChooserDialog), + 0, + (GInstanceInitFunc) exo_helper_chooser_dialog_init, + NULL, + }; + + type = g_type_register_static (GTK_TYPE_DIALOG, I_("ExoHelperChooserDialog"), &info, 0); + } + + return type; +} + + + +static void +exo_helper_chooser_dialog_class_init (ExoHelperChooserDialogClass *klass) +{ + GtkWidgetClass *gtkwidget_class; + + /* determine the parent type class */ + exo_helper_chooser_dialog_parent_class = g_type_class_peek_parent (klass); + + gtkwidget_class = GTK_WIDGET_CLASS (klass); + gtkwidget_class->key_press_event = exo_helper_chooser_dialog_key_press_event; +} + + + +static void +exo_helper_chooser_dialog_init (ExoHelperChooserDialog *chooser_dialog) +{ + PangoAttribute *attribute; + PangoAttrList *attr_list_bold; + AtkRelationSet *relations; + AtkRelation *relation; + AtkObject *object; + GtkWidget *notebook; + GtkWidget *chooser; + GtkWidget *header; + GtkWidget *frame; + GtkWidget *label; + GtkWidget *vbox; + GtkWidget *box; + + /* verify category settings */ + g_assert (EXO_HELPER_N_CATEGORIES == 3); + + gtk_dialog_add_button (GTK_DIALOG (chooser_dialog), GTK_STOCK_HELP, GTK_RESPONSE_HELP); + gtk_dialog_add_button (GTK_DIALOG (chooser_dialog), GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE); + gtk_dialog_set_has_separator (GTK_DIALOG (chooser_dialog), FALSE); + gtk_window_set_title (GTK_WINDOW (chooser_dialog), _("Preferred Applications")); + + header = exo_helper_create_header ("preferences-desktop-default-applications", _("Preferred Applications")); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (chooser_dialog)->vbox), header, FALSE, FALSE, 0); + gtk_widget_show (header); + + notebook = gtk_notebook_new (); + gtk_container_set_border_width (GTK_CONTAINER (notebook), 6); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (chooser_dialog)->vbox), notebook, TRUE, TRUE, 0); + gtk_widget_show (notebook); + + /* allocate shared bold label attributes */ + attr_list_bold = pango_attr_list_new (); + attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD); + attribute->start_index = 0; + attribute->end_index = -1; + pango_attr_list_insert (attr_list_bold, attribute); + + /* + Internet + */ + label = gtk_label_new (_("Internet")); + vbox = g_object_new (GTK_TYPE_VBOX, "border-width", 12, "spacing", 24, NULL); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); + gtk_widget_show (label); + gtk_widget_show (vbox); + + /* + Web Browser + */ + frame = g_object_new (GTK_TYPE_FRAME, "border-width", 0, "shadow-type", GTK_SHADOW_NONE, NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + label = g_object_new (GTK_TYPE_LABEL, "attributes", attr_list_bold, "label", _("Default Web Browser"), NULL); + gtk_frame_set_label_widget (GTK_FRAME (frame), label); + gtk_widget_show (label); + + box = g_object_new (GTK_TYPE_VBOX, "border-width", 12, "spacing", 12, NULL); + gtk_container_add (GTK_CONTAINER (frame), box); + gtk_widget_show (box); + + label = gtk_label_new (_("The preferred Web Browser will be used to open\n" + "hyperlinks and display help contents.")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + chooser = exo_helper_chooser_new (EXO_HELPER_WEBBROWSER); + gtk_box_pack_start (GTK_BOX (box), chooser, FALSE, FALSE, 0); + gtk_widget_show (chooser); + + /* set Atk label relation for the chooser */ + object = gtk_widget_get_accessible (chooser); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); + relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); + + /* + Mail Reader + */ + frame = g_object_new (GTK_TYPE_FRAME, "border-width", 0, "shadow-type", GTK_SHADOW_NONE, NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + label = g_object_new (GTK_TYPE_LABEL, "attributes", attr_list_bold, "label", _("Default Mail Reader"), NULL); + gtk_frame_set_label_widget (GTK_FRAME (frame), label); + gtk_widget_show (label); + + box = g_object_new (GTK_TYPE_VBOX, "border-width", 12, "spacing", 12, NULL); + gtk_container_add (GTK_CONTAINER (frame), box); + gtk_widget_show (box); + + label = gtk_label_new (_("The preferred Mail Reader will be used to compose\n" + "emails when you click on email addresses.")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + chooser = exo_helper_chooser_new (EXO_HELPER_MAILREADER); + gtk_box_pack_start (GTK_BOX (box), chooser, FALSE, FALSE, 0); + gtk_widget_show (chooser); + + /* set Atk label relation for the chooser */ + object = gtk_widget_get_accessible (chooser); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); + relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); + + /* + Utilities + */ + label = gtk_label_new (_("Utilities")); + vbox = g_object_new (GTK_TYPE_VBOX, "border-width", 12, "spacing", 24, NULL); + gtk_notebook_append_page (GTK_NOTEBOOK (notebook), vbox, label); + gtk_widget_show (label); + gtk_widget_show (vbox); + + /* + Terminal Emulator + */ + frame = g_object_new (GTK_TYPE_FRAME, "border-width", 0, "shadow-type", GTK_SHADOW_NONE, NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, TRUE, 0); + gtk_widget_show (frame); + + label = g_object_new (GTK_TYPE_LABEL, "attributes", attr_list_bold, "label", _("Default Terminal Emulator"), NULL); + gtk_frame_set_label_widget (GTK_FRAME (frame), label); + gtk_widget_show (label); + + box = g_object_new (GTK_TYPE_VBOX, "border-width", 12, "spacing", 12, NULL); + gtk_container_add (GTK_CONTAINER (frame), box); + gtk_widget_show (box); + + label = gtk_label_new (_("The preferred Terminal Emulator will be used to\n" + "run commands that require a CLI environment.")); + gtk_misc_set_alignment (GTK_MISC (label), 0.0f, 0.0f); + gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + chooser = exo_helper_chooser_new (EXO_HELPER_TERMINALEMULATOR); + gtk_box_pack_start (GTK_BOX (box), chooser, FALSE, FALSE, 0); + gtk_widget_show (chooser); + + /* set Atk label relation for the chooser */ + object = gtk_widget_get_accessible (chooser); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (label)); + relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); + + /* cleanup */ + pango_attr_list_unref (attr_list_bold); +} + + + +static gboolean +exo_helper_chooser_dialog_key_press_event (GtkWidget *widget, + GdkEventKey *event) +{ + if (G_UNLIKELY (event->keyval == GDK_Escape)) + { + gtk_dialog_response (GTK_DIALOG (widget), GTK_RESPONSE_CLOSE); + return TRUE; + } + + return (*GTK_WIDGET_CLASS (exo_helper_chooser_dialog_parent_class)->key_press_event) (widget, event); +} + + + +/** + * exo_helper_chooser_dialog_new: + * + * Allocates a new #ExoHelperChooserDialog. + * + * Return value: the newly allocated #ExoHelperChooserDialog. + **/ +GtkWidget* +exo_helper_chooser_dialog_new (void) +{ + return g_object_new (EXO_TYPE_HELPER_CHOOSER_DIALOG, NULL); +} + + diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-chooser-dialog.h ./exo-helper/exo-helper-chooser-dialog.h --- ../libexo-without-helpers/exo-helper/exo-helper-chooser-dialog.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-chooser-dialog.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,43 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __EXO_HELPER_CHOOSER_DIALOG_H__ +#define __EXO_HELPER_CHOOSER_DIALOG_H__ + +#include + +G_BEGIN_DECLS; + +typedef struct _ExoHelperChooserDialogClass ExoHelperChooserDialogClass; +typedef struct _ExoHelperChooserDialog ExoHelperChooserDialog; + +#define EXO_TYPE_HELPER_CHOOSER_DIALOG (exo_helper_chooser_dialog_get_type ()) +#define EXO_HELPER_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_HELPER_CHOOSER_DIALOG, ExoHelperChooserDialog)) +#define EXO_HELPER_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_HELPER_CHOOSER_DIALOG, ExoHelperChooserDialogClass)) +#define EXO_IS_HELPER_CHOOSER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_HELPER_CHOOSER_DIALOG)) +#define EXO_IS_HELPER_CHOOSER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_HELPER_CHOOSER_DIALOG)) +#define EXO_HELPER_CHOOSER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_HELPER_CHOOSER_DIALOG, ExoHelperChooserDialogClass)) + +GType exo_helper_chooser_dialog_get_type (void) G_GNUC_CONST; + +GtkWidget *exo_helper_chooser_dialog_new (void) G_GNUC_MALLOC; + +G_END_DECLS; + +#endif /* !__EXO_HELPER_CHOOSER_DIALOG_H__ */ diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-chooser.c ./exo-helper/exo-helper-chooser.c --- ../libexo-without-helpers/exo-helper/exo-helper-chooser.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-chooser.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,790 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + + + +/* Property identifiers */ +enum +{ + PROP_0, + PROP_CATEGORY, + PROP_IS_VALID, +}; + + + +static void exo_helper_chooser_class_init (ExoHelperChooserClass *klass); +static void exo_helper_chooser_init (ExoHelperChooser *chooser); +static void exo_helper_chooser_finalize (GObject *object); +static void exo_helper_chooser_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); +static void exo_helper_chooser_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void exo_helper_chooser_update (ExoHelperChooser *chooser); +static void exo_helper_chooser_pressed (ExoHelperChooser *chooser, + GtkWidget *button); + + + +struct _ExoHelperChooserClass +{ + GtkAlignmentClass __parent__; +}; + +struct _ExoHelperChooser +{ + GtkAlignment __parent__; + + GtkWidget *image; + GtkWidget *label; + GtkTooltips *tooltips; + + ExoHelperDatabase *database; + ExoHelperCategory category; + + gboolean is_valid; +}; + + + +static GObjectClass *exo_helper_chooser_parent_class; + + + +GType +exo_helper_chooser_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (ExoHelperChooserClass), + NULL, + NULL, + (GClassInitFunc) exo_helper_chooser_class_init, + NULL, + NULL, + sizeof (ExoHelperChooser), + 0, + (GInstanceInitFunc) exo_helper_chooser_init, + NULL, + }; + + type = g_type_register_static (GTK_TYPE_ALIGNMENT, I_("ExoHelperChooser"), &info, 0); + } + + return type; +} + + + +static void +exo_helper_chooser_class_init (ExoHelperChooserClass *klass) +{ + GObjectClass *gobject_class; + + /* determine the parent type class */ + exo_helper_chooser_parent_class = g_type_class_peek_parent (klass); + + gobject_class = G_OBJECT_CLASS (klass); + gobject_class->finalize = exo_helper_chooser_finalize; + gobject_class->get_property = exo_helper_chooser_get_property; + gobject_class->set_property = exo_helper_chooser_set_property; + + /** + * ExoHelperChooser:category: + * + * The #ExoHelperCategory which should be configured by this + * #ExoHelperChooser. See exo_helper_chooser_get_category() and + * exo_helper_chooser_set_category() for details. + **/ + g_object_class_install_property (gobject_class, + PROP_CATEGORY, + g_param_spec_enum ("category", + "Helper category", + "Helper category", + EXO_TYPE_HELPER_CATEGORY, + EXO_HELPER_WEBBROWSER, + EXO_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + + /** + * ExoHelperChooser:is-valid: + * + * %TRUE if a valid #ExoHelper is selected by + * this #ExoHelperChooser, else %FALSE. + **/ + g_object_class_install_property (gobject_class, + PROP_IS_VALID, + g_param_spec_boolean ("is-valid", + "Is valid", + "Is valid", + FALSE, + EXO_PARAM_READABLE)); +} + + + +static void +exo_helper_chooser_init (ExoHelperChooser *chooser) +{ + AtkRelationSet *relations; + AtkRelation *relation; + AtkObject *object; + GtkWidget *separator; + GtkWidget *button; + GtkWidget *arrow; + GtkWidget *hbox; + + chooser->database = exo_helper_database_get (); + + chooser->tooltips = gtk_tooltips_new (); + exo_gtk_object_ref_sink (GTK_OBJECT (chooser->tooltips)); + + gtk_widget_push_composite_child (); + + button = gtk_button_new (); + g_signal_connect_swapped (G_OBJECT (button), "pressed", G_CALLBACK (exo_helper_chooser_pressed), chooser); + gtk_tooltips_set_tip (chooser->tooltips, button, _("Press left mouse button to change the selected application."), NULL); + gtk_container_add (GTK_CONTAINER (chooser), button); + gtk_widget_show (button); + + /* set Atk properties for the button */ + object = gtk_widget_get_accessible (button); + atk_object_set_name (object, _("Application Chooser Button")); + atk_object_set_description (object, _("Press left mouse button to change the selected application.")); + + hbox = gtk_hbox_new (FALSE, 4); + gtk_container_add (GTK_CONTAINER (button), hbox); + gtk_widget_show (hbox); + + chooser->image = gtk_image_new (); + gtk_box_pack_start (GTK_BOX (hbox), chooser->image, FALSE, FALSE, 0); + gtk_widget_show (chooser->image); + + chooser->label = g_object_new (GTK_TYPE_LABEL, "xalign", 0.0f, "yalign", 0.0f, NULL); + gtk_box_pack_start (GTK_BOX (hbox), chooser->label, TRUE, TRUE, 0); + gtk_widget_show (chooser->label); + + /* set Atk label relation for the button */ + object = gtk_widget_get_accessible (button); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (chooser->label)); + relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); + + separator = g_object_new (GTK_TYPE_VSEPARATOR, "height-request", 16, NULL); + gtk_box_pack_start (GTK_BOX (hbox), separator, FALSE, FALSE, 0); + gtk_widget_show (separator); + + arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_NONE); + gtk_box_pack_start (GTK_BOX (hbox), arrow, FALSE, FALSE, 0); + gtk_widget_show (arrow); + + gtk_widget_pop_composite_child (); +} + + + +static void +exo_helper_chooser_finalize (GObject *object) +{ + ExoHelperChooser *chooser = EXO_HELPER_CHOOSER (object); + + g_object_unref (G_OBJECT (chooser->database)); + g_object_unref (G_OBJECT (chooser->tooltips)); + + (*G_OBJECT_CLASS (exo_helper_chooser_parent_class)->finalize) (object); +} + + + +static void +exo_helper_chooser_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + ExoHelperChooser *chooser = EXO_HELPER_CHOOSER (object); + + switch (prop_id) + { + case PROP_CATEGORY: + g_value_set_enum (value, exo_helper_chooser_get_category (chooser)); + break; + + case PROP_IS_VALID: + g_value_set_boolean (value, exo_helper_chooser_get_is_valid (chooser)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + +static void +exo_helper_chooser_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + ExoHelperChooser *chooser = EXO_HELPER_CHOOSER (object); + + switch (prop_id) + { + case PROP_CATEGORY: + exo_helper_chooser_set_category (chooser, g_value_get_enum (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + +static void +exo_helper_chooser_update (ExoHelperChooser *chooser) +{ + GtkIconTheme *icon_theme; + const gchar *icon_name; + ExoHelper *helper; + GdkPixbuf *icon = NULL; + gint icon_size; + + g_return_if_fail (EXO_IS_HELPER_CHOOSER (chooser)); + + /* determine the default helper for the category */ + helper = exo_helper_database_get_default (chooser->database, chooser->category); + if (G_LIKELY (helper != NULL)) + { + /* try to load the icon for the helper */ + icon_name = exo_helper_get_icon (helper); + if (G_LIKELY (icon_name != NULL)) + { + gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &icon_size, &icon_size); + if (g_path_is_absolute (icon_name)) + { + icon = gdk_pixbuf_new_from_file_at_scale (icon_name, icon_size, icon_size, TRUE, NULL); + } + else + { + icon_theme = gtk_icon_theme_get_default (); + icon = gtk_icon_theme_load_icon (icon_theme, icon_name, icon_size, 0, NULL); + } + } + gtk_image_set_from_pixbuf (GTK_IMAGE (chooser->image), icon); + if (G_LIKELY (icon != NULL)) + g_object_unref (G_OBJECT (icon)); + + gtk_label_set_text (GTK_LABEL (chooser->label), exo_helper_get_name (helper)); + g_object_unref (G_OBJECT (helper)); + } + else + { + gtk_image_set_from_pixbuf (GTK_IMAGE (chooser->image), NULL); + gtk_label_set_text (GTK_LABEL (chooser->label), _("No application selected")); + } + + /* update the "is-valid" property */ + chooser->is_valid = (helper != NULL); + g_object_notify (G_OBJECT (chooser), "is-valid"); +} + + + +static void +menu_activate (GtkWidget *item, + ExoHelperChooser *chooser) +{ + static const gchar *CATEGORY_ERRORS[] = + { + N_("Failed to set default Web Browser"), + N_("Failed to set default Mail Reader"), + N_("Failed to set default Terminal Emulator"), + }; + + ExoHelper *helper; + GtkWidget *message; + GError *error = NULL; + + /* verify helper category values */ + g_assert (EXO_HELPER_N_CATEGORIES == G_N_ELEMENTS (CATEGORY_ERRORS)); + + g_return_if_fail (GTK_IS_WIDGET (item)); + g_return_if_fail (EXO_IS_HELPER_CHOOSER (chooser)); + + /* determine the helper for the item */ + helper = g_object_get_data (G_OBJECT (item), I_("exo-helper")); + if (G_LIKELY (helper != NULL)) + { + if (!exo_helper_database_set_default (chooser->database, chooser->category, helper, &error)) + { + message = gtk_message_dialog_new (GTK_WINDOW (chooser), + GTK_DIALOG_DESTROY_WITH_PARENT + | GTK_DIALOG_MODAL, + GTK_MESSAGE_ERROR, + GTK_BUTTONS_CLOSE, + "%s.", _(CATEGORY_ERRORS[chooser->category])); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message), "%s.", error->message); + gtk_dialog_run (GTK_DIALOG (message)); + gtk_widget_destroy (message); + g_error_free (error); + } + else + { + /* update the chooser state */ + exo_helper_chooser_update (chooser); + } + } +} + + + +static void +entry_changed (GtkEditable *editable, + GtkDialog *dialog) +{ + gchar *text; + + text = gtk_editable_get_chars (editable, 0, -1); + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, *text != '\0'); + g_free (text); +} + + + +static void +browse_clicked (GtkWidget *button, + GtkWidget *entry) +{ + GtkWidget *toplevel; + GtkWidget *dialog; + gchar **argv; + gchar *filename; + gchar *text; + + toplevel = gtk_widget_get_toplevel (entry); + dialog = gtk_file_chooser_dialog_new (_("Select application"), + GTK_WINDOW (toplevel), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, + NULL); + gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), BINDIR); + gtk_file_chooser_set_local_only (GTK_FILE_CHOOSER (dialog), TRUE); + + filename = gtk_editable_get_chars (GTK_EDITABLE (entry), 0, -1); + if (G_LIKELY (filename != NULL && g_shell_parse_argv (filename, NULL, &argv, NULL))) + { + if (G_LIKELY (*argv != NULL && g_path_is_absolute (*argv))) + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), *argv); + g_strfreev (argv); + } + g_free (filename); + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) + { + filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); + text = g_strconcat (filename, " \"%s\"", NULL); + gtk_entry_set_text (GTK_ENTRY (entry), text); + g_free (filename); + g_free (text); + } + + gtk_widget_destroy (dialog); +} + + + +static void +menu_activate_other (GtkWidget *item, + ExoHelperChooser *chooser) +{ + static const gchar *BROWSE_TITLES[] = + { + N_("Choose a custom Web Browser"), + N_("Choose a custom Mail Reader"), + N_("Choose a custom Terminal Emulator"), + }; + + static const gchar *BROWSE_MESSAGES[] = + { + N_("Specify the application you want to use\nas default Web Browser for Xfce:"), + N_("Specify the application you want to use\nas default Mail Reader for Xfce:"), + N_("Specify the application you want to use\nas default Terminal Emulator for Xfce:"), + }; + + const gchar *command; + ExoHelper *helper; + GtkWidget *toplevel; + GtkWidget *dialog; + GtkWidget *hbox; + GtkWidget *image; + GtkWidget *vbox; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *button; + + /* sanity check the category values */ + g_assert (EXO_HELPER_N_CATEGORIES == 3); + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (chooser)); + + dialog = gtk_dialog_new_with_buttons (dgettext (GETTEXT_PACKAGE, BROWSE_TITLES[chooser->category]), + GTK_WINDOW (toplevel), + GTK_DIALOG_DESTROY_WITH_PARENT + | GTK_DIALOG_NO_SEPARATOR + | GTK_DIALOG_MODAL, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_OK, + NULL); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE); + gtk_container_set_border_width (GTK_CONTAINER (dialog), 6); + gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), 12); + gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); + + hbox = g_object_new (GTK_TYPE_HBOX, "border-width", 5, "spacing", 12, NULL); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + image = gtk_image_new_from_icon_name ("preferences-desktop-default-applications", GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.0); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_show (image); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); + gtk_widget_show (vbox); + + label = g_object_new (GTK_TYPE_LABEL, + "label", _(BROWSE_MESSAGES[chooser->category]), + "xalign", 0.0, + "yalign", 0.0, + NULL); + gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, TRUE, 0); + gtk_widget_show (label); + + hbox = gtk_hbox_new (FALSE, 3); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, TRUE, 0); + gtk_widget_show (hbox); + + entry = g_object_new (GTK_TYPE_ENTRY, "activates-default", TRUE, NULL); + g_signal_connect (G_OBJECT (entry), "changed", G_CALLBACK (entry_changed), dialog); + gtk_box_pack_start (GTK_BOX (hbox), entry, TRUE, TRUE, 0); + gtk_widget_show (entry); + + button = gtk_button_new (); + gtk_tooltips_set_tip (chooser->tooltips, button, _("Browse the file system to choose a custom command."), NULL); + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (browse_clicked), entry); + gtk_box_pack_start (GTK_BOX (hbox), button, FALSE, FALSE, 0); + gtk_widget_show (button); + + image = gtk_image_new_from_stock (GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON); + gtk_container_add (GTK_CONTAINER (button), image); + gtk_widget_show (image); + + /* set the current custom command (if any) */ + helper = exo_helper_database_get_custom (chooser->database, chooser->category); + if (G_LIKELY (helper != NULL)) + { + command = exo_helper_get_command (helper); + if (G_LIKELY (command != NULL)) + gtk_entry_set_text (GTK_ENTRY (entry), command); + } + + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) + { + /* change the custom command in the database */ + command = gtk_entry_get_text (GTK_ENTRY (entry)); + exo_helper_database_set_custom (chooser->database, chooser->category, command); + + /* reload the custom helper */ + helper = exo_helper_database_get_custom (chooser->database, chooser->category); + if (G_LIKELY (helper != NULL)) + { + /* hide the dialog */ + gtk_widget_hide (dialog); + + /* use menu_activate() to set the custom application as default */ + g_object_set_data_full (G_OBJECT (item), I_("exo-helper"), helper, g_object_unref); + menu_activate (item, chooser); + } + } + + gtk_widget_destroy (dialog); +} + + + +static void +menu_position (GtkMenu *menu, + gint *x, + gint *y, + gboolean *push_in, + gpointer chooser) +{ + GtkRequisition chooser_request; + GtkRequisition menu_request; + GdkRectangle geometry; + GdkScreen *screen; + GtkWidget *toplevel = gtk_widget_get_toplevel (chooser); + gint monitor; + gint x0; + gint y0; + + gtk_widget_translate_coordinates (GTK_WIDGET (chooser), toplevel, 0, 0, &x0, &y0); + + gtk_widget_size_request (GTK_WIDGET (chooser), &chooser_request); + gtk_widget_size_request (GTK_WIDGET (menu), &menu_request); + + gdk_window_get_position (GTK_WIDGET (chooser)->window, x, y); + + *y += y0; + *x += x0; + + /* verify the the menu is on-screen */ + screen = gtk_widget_get_screen (GTK_WIDGET (chooser)); + if (G_LIKELY (screen != NULL)) + { + monitor = gdk_screen_get_monitor_at_point (screen, *x, *y); + gdk_screen_get_monitor_geometry (screen, monitor, &geometry); + if (*y + menu_request.height > geometry.y + geometry.height) + *y -= menu_request.height - chooser_request.height; + } + + *push_in = TRUE; +} + + + +static void +exo_helper_chooser_pressed (ExoHelperChooser *chooser, + GtkWidget *button) +{ + AtkRelationSet *relations; + AtkRelation *relation; + AtkObject *object; + GtkIconTheme *icon_theme; + const gchar *icon_name; + ExoHelper *helper; + GMainLoop *loop; + GdkCursor *cursor; + GdkPixbuf *icon; + GtkWidget *image; + GtkWidget *menu; + GtkWidget *item; + GList *helpers; + GList *lp; + gint icon_size; + + g_return_if_fail (EXO_IS_HELPER_CHOOSER (chooser)); + g_return_if_fail (GTK_IS_BUTTON (button)); + + /* set a watch cursor while loading the menu */ + if (G_LIKELY (button->window != NULL)) + { + cursor = gdk_cursor_new (GDK_WATCH); + gdk_window_set_cursor (button->window, cursor); + gdk_cursor_unref (cursor); + gdk_flush (); + } + + /* allocate a new menu */ + menu = gtk_menu_new (); + exo_gtk_object_ref_sink (GTK_OBJECT (menu)); + gtk_menu_set_screen (GTK_MENU (menu), gtk_widget_get_screen (button)); + + /* set Atk popup-window relation for the menu */ + object = gtk_widget_get_accessible (button); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (menu)); + relation = atk_relation_new (&object, 1, ATK_RELATION_POPUP_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); + + /* determine the icon theme to use */ + icon_theme = gtk_icon_theme_get_default (); + + /* determine the menu icon size */ + gtk_icon_size_lookup (GTK_ICON_SIZE_MENU, &icon_size, &icon_size); + + /* append menu items for all available helpers */ + helpers = exo_helper_database_get_all (chooser->database, chooser->category); + for (lp = helpers; lp != NULL; lp = lp->next) + { + /* determine the helper */ + helper = EXO_HELPER (lp->data); + + /* add a menu item for the helper */ + item = gtk_image_menu_item_new_with_label (exo_helper_get_name (helper)); + g_object_set_data_full (G_OBJECT (item), I_("exo-helper"), helper, g_object_unref); + g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (menu_activate), chooser); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + /* try to load the icon for the helper */ + icon_name = exo_helper_get_icon (helper); + if (G_LIKELY (icon_name != NULL)) + { + /* load the icon */ + if (g_path_is_absolute (icon_name)) + icon = gdk_pixbuf_new_from_file_at_scale (icon_name, icon_size, icon_size, TRUE, NULL); + else + icon = gtk_icon_theme_load_icon (icon_theme, icon_name, icon_size, 0, NULL); + + /* setup the icon */ + if (G_LIKELY (icon != NULL)) + { + image = gtk_image_new_from_pixbuf (icon); + gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image); + g_object_unref (G_OBJECT (icon)); + gtk_widget_show (image); + } + } + } + + if (G_LIKELY (helpers != NULL)) + { + item = gtk_separator_menu_item_new (); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + } + + item = gtk_menu_item_new_with_mnemonic (_("_Other...")); + gtk_tooltips_set_tip (chooser->tooltips, item, _("Use a custom application which is not included in the above list."), NULL); + g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (menu_activate_other), chooser); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + gtk_widget_show (item); + + /* make sure the menu has atleast the same width as the chooser */ + if (menu->allocation.width < GTK_WIDGET (chooser)->allocation.width) + gtk_widget_set_size_request (menu, GTK_WIDGET (chooser)->allocation.width, -1); + + /* reset the watch cursor on the chooser */ + if (G_LIKELY (button->window != NULL)) + gdk_window_set_cursor (button->window, NULL); + + /* allocate a new main loop */ + loop = g_main_loop_new (NULL, FALSE); + g_signal_connect_swapped (G_OBJECT (menu), "deactivate", G_CALLBACK (g_main_loop_quit), loop); + + /* run the loop for the menu */ + gtk_grab_add (menu); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, menu_position, button, 0, gtk_get_current_event_time ()); + g_main_loop_run (loop); + gtk_grab_remove (menu); + g_main_loop_unref (loop); + + gtk_button_released (GTK_BUTTON (button)); + g_object_unref (G_OBJECT (menu)); +} + + + +/** + * exo_helper_chooser_new: + * @category : the #ExoHelperCategory for the chooser. + * + * Allocates a new #ExoHelperChooser for the given + * @category. + * + * Return value: the newly allocated #ExoHelperChooser. + **/ +GtkWidget* +exo_helper_chooser_new (ExoHelperCategory category) +{ + g_return_val_if_fail (category >= 0 && category < EXO_HELPER_N_CATEGORIES, NULL); + return g_object_new (EXO_TYPE_HELPER_CHOOSER, "category", category, NULL); +} + + + +/** + * exo_helper_chooser_get_category: + * @chooser : an #ExoHelperChooser. + * + * Returns the #ExoHelperCategory which is configured + * by @chooser. + * + * Return value: the category for @chooser. + **/ +ExoHelperCategory +exo_helper_chooser_get_category (const ExoHelperChooser *chooser) +{ + g_return_val_if_fail (EXO_IS_HELPER_CHOOSER (chooser), EXO_HELPER_WEBBROWSER); + return chooser->category; +} + + + +/** + * exo_helper_chooser_set_category: + * @chooser : an #ExoHelperChooser. + * @category : an #ExoHelperCategory. + * + * Sets the category for @chooser to @category. + **/ +void +exo_helper_chooser_set_category (ExoHelperChooser *chooser, + ExoHelperCategory category) +{ + g_return_if_fail (EXO_IS_HELPER_CHOOSER (chooser)); + g_return_if_fail (category >= 0 && category < EXO_HELPER_N_CATEGORIES); + + /* apply the new category */ + chooser->category = category; + exo_helper_chooser_update (chooser); + g_object_notify (G_OBJECT (chooser), "category"); +} + + + +/** + * exo_helper_chooser_get_is_valid: + * @chooser : an #ExoHelperChooser. + * + * Returns %TRUE if a valid helper is selected for + * @chooser. + * + * Return value: %TRUE if a valid helper is selected. + **/ +gboolean +exo_helper_chooser_get_is_valid (const ExoHelperChooser *chooser) +{ + g_return_val_if_fail (EXO_IS_HELPER_CHOOSER (chooser), FALSE); + return chooser->is_valid; +} diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-chooser.h ./exo-helper/exo-helper-chooser.h --- ../libexo-without-helpers/exo-helper/exo-helper-chooser.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-chooser.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,49 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __EXO_HELPER_CHOOSER_H__ +#define __EXO_HELPER_CHOOSER_H__ + +#include + +G_BEGIN_DECLS; + +#define EXO_TYPE_HELPER_CHOOSER (exo_helper_chooser_get_type ()) +#define EXO_HELPER_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_HELPER_CHOOSER, ExoHelperChooser)) +#define EXO_HELPER_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_HELPER_CHOOSER, ExoHelperChooserClass)) +#define EXO_IS_HELPER_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_HELPER_CHOOSER)) +#define EXO_IS_HELPER_CHOOSER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_HELPER_CHOOSER)) +#define EXO_HELPER_CHOOSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_HELPER_CHOOSER, ExoHelperChooserClass)) + +typedef struct _ExoHelperChooserClass ExoHelperChooserClass; +typedef struct _ExoHelperChooser ExoHelperChooser; + +GType exo_helper_chooser_get_type (void) G_GNUC_CONST; + +GtkWidget *exo_helper_chooser_new (ExoHelperCategory category) G_GNUC_MALLOC; + +ExoHelperCategory exo_helper_chooser_get_category (const ExoHelperChooser *chooser); +void exo_helper_chooser_set_category (ExoHelperChooser *chooser, + ExoHelperCategory category); + +gboolean exo_helper_chooser_get_is_valid (const ExoHelperChooser *chooser); + +G_END_DECLS; + +#endif /* !__EXO_HELPER_CHOOSER_H__ */ diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-enum-types.c ./exo-helper/exo-helper-enum-types.c --- ../libexo-without-helpers/exo-helper/exo-helper-enum-types.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-enum-types.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,26 @@ + +/* Generated data (by glib-mkenums) */ + +#undef GTK_DISABLE_DEPRECATED +#define GTK_ENABLE_BROKEN +#include + +/* enumerations from "exo-helper.h" */ +GType +exo_helper_category_get_type (void) +{ + static GType type = 0; + if (type == 0) { + static const GEnumValue values[] = { + { EXO_HELPER_WEBBROWSER, "EXO_HELPER_WEBBROWSER", "WebBrowser" }, + { EXO_HELPER_MAILREADER, "EXO_HELPER_MAILREADER", "MailReader" }, + { EXO_HELPER_TERMINALEMULATOR, "EXO_HELPER_TERMINALEMULATOR", "TerminalEmulator" }, + { 0, NULL, NULL } + }; + type = g_enum_register_static ("ExoHelperCategory", values); + } + return type; +} + +/* Generated data ends here */ + diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-enum-types.h ./exo-helper/exo-helper-enum-types.h --- ../libexo-without-helpers/exo-helper/exo-helper-enum-types.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-enum-types.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,16 @@ + +/* Generated data (by glib-mkenums) */ + +#ifndef __EXO_HELPER_ENUM_TYPES_H__ +#define __EXO_HELPER_ENUM_TYPES_H__ +#include +G_BEGIN_DECLS +/* enumerations from "exo-helper.h" */ +GType exo_helper_category_get_type (void) G_GNUC_CONST; +#define EXO_TYPE_HELPER_CATEGORY (exo_helper_category_get_type()) +G_END_DECLS + +#endif /* !__EXO_HELPER_ENUM_TYPES_H__ */ + +/* Generated data ends here */ + diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-launcher-dialog.c ./exo-helper/exo-helper-launcher-dialog.c --- ../libexo-without-helpers/exo-helper/exo-helper-launcher-dialog.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-launcher-dialog.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,307 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include + + + +/* Property identifiers */ +enum +{ + PROP_0, + PROP_CATEGORY, +}; + + + +static void exo_helper_launcher_dialog_class_init (ExoHelperLauncherDialogClass *klass); +static void exo_helper_launcher_dialog_init (ExoHelperLauncherDialog *launcher_dialog); +static void exo_helper_launcher_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec); +static void exo_helper_launcher_dialog_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec); +static void exo_helper_launcher_dialog_notify_is_valid (ExoHelperChooser *chooser, + GParamSpec *pspec, + ExoHelperLauncherDialog *launcher_dialog); + + + +struct _ExoHelperLauncherDialogClass +{ + GtkDialogClass __parent__; +}; + +struct _ExoHelperLauncherDialog +{ + GtkDialog __parent__; + GtkWidget *label; + ExoHelperCategory category; +}; + + + +GType +exo_helper_launcher_dialog_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (ExoHelperLauncherDialogClass), + NULL, + NULL, + (GClassInitFunc) exo_helper_launcher_dialog_class_init, + NULL, + NULL, + sizeof (ExoHelperLauncherDialog), + 0, + (GInstanceInitFunc) exo_helper_launcher_dialog_init, + NULL, + }; + + type = g_type_register_static (GTK_TYPE_DIALOG, I_("ExoHelperLauncherDialog"), &info, 0); + } + + return type; +} + + + +static void +exo_helper_launcher_dialog_class_init (ExoHelperLauncherDialogClass *klass) +{ + GObjectClass *gobject_class; + + gobject_class = G_OBJECT_CLASS (klass); + gobject_class->get_property = exo_helper_launcher_dialog_get_property; + gobject_class->set_property = exo_helper_launcher_dialog_set_property; + + /** + * ExoHelperLauncherDialog:category: + * + * The #ExoHelperCategory for which a launcher dialog will + * be displayed. + **/ + g_object_class_install_property (gobject_class, + PROP_CATEGORY, + g_param_spec_enum ("category", + "Category", + "Category", + EXO_TYPE_HELPER_CATEGORY, + EXO_HELPER_WEBBROWSER, + EXO_PARAM_READWRITE | G_PARAM_CONSTRUCT)); +} + + + +static void +exo_helper_launcher_dialog_init (ExoHelperLauncherDialog *launcher_dialog) +{ + AtkRelationSet *relations; + AtkRelation *relation; + AtkObject *object; + GtkWidget *chooser; + GtkWidget *image; + GtkWidget *hbox; + GtkWidget *vbox; + + gtk_dialog_add_button (GTK_DIALOG (launcher_dialog), GTK_STOCK_HELP, GTK_RESPONSE_HELP); + gtk_dialog_add_button (GTK_DIALOG (launcher_dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); + gtk_dialog_add_button (GTK_DIALOG (launcher_dialog), GTK_STOCK_OK, GTK_RESPONSE_OK); + gtk_dialog_set_default_response (GTK_DIALOG (launcher_dialog), GTK_RESPONSE_OK); + gtk_dialog_set_has_separator (GTK_DIALOG (launcher_dialog), FALSE); + gtk_window_set_resizable (GTK_WINDOW (launcher_dialog), FALSE); + gtk_window_set_title (GTK_WINDOW (launcher_dialog), _("Choose Preferred Application")); + + hbox = gtk_hbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 12); + gtk_box_pack_start (GTK_BOX (GTK_DIALOG (launcher_dialog)->vbox), hbox, TRUE, TRUE, 0); + gtk_widget_show (hbox); + + image = gtk_image_new_from_icon_name ("preferences-desktop-default-applications", GTK_ICON_SIZE_DIALOG); + gtk_misc_set_alignment (GTK_MISC (image), 0.5f, 0.0f); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); + gtk_widget_show (image); + + vbox = gtk_vbox_new (FALSE, 12); + gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0); + gtk_widget_show (vbox); + + launcher_dialog->label = gtk_label_new (""); + gtk_box_pack_start (GTK_BOX (vbox), launcher_dialog->label, FALSE, FALSE, 0); + gtk_widget_show (launcher_dialog->label); + + chooser = g_object_new (EXO_TYPE_HELPER_CHOOSER, NULL); + g_signal_connect (G_OBJECT (chooser), "notify::is-valid", G_CALLBACK (exo_helper_launcher_dialog_notify_is_valid), launcher_dialog); + exo_binding_new (G_OBJECT (launcher_dialog), "category", G_OBJECT (chooser), "category"); + gtk_box_pack_start (GTK_BOX (vbox), chooser, FALSE, FALSE, 0); + gtk_widget_show (chooser); + + /* set Atk label relation for the chooser */ + object = gtk_widget_get_accessible (chooser); + relations = atk_object_ref_relation_set (gtk_widget_get_accessible (launcher_dialog->label)); + relation = atk_relation_new (&object, 1, ATK_RELATION_LABEL_FOR); + atk_relation_set_add (relations, relation); + g_object_unref (G_OBJECT (relation)); +} + + + +static void +exo_helper_launcher_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + ExoHelperLauncherDialog *launcher_dialog = EXO_HELPER_LAUNCHER_DIALOG (object); + + switch (prop_id) + { + case PROP_CATEGORY: + g_value_set_enum (value, exo_helper_launcher_dialog_get_category (launcher_dialog)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + +static void +exo_helper_launcher_dialog_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) +{ + ExoHelperLauncherDialog *launcher_dialog = EXO_HELPER_LAUNCHER_DIALOG (object); + + switch (prop_id) + { + case PROP_CATEGORY: + exo_helper_launcher_dialog_set_category (launcher_dialog, g_value_get_enum (value)); + break; + + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} + + + +static void +exo_helper_launcher_dialog_notify_is_valid (ExoHelperChooser *chooser, + GParamSpec *pspec, + ExoHelperLauncherDialog *launcher_dialog) +{ + g_return_if_fail (EXO_IS_HELPER_CHOOSER (chooser)); + g_return_if_fail (EXO_IS_HELPER_LAUNCHER_DIALOG (launcher_dialog)); + + gtk_dialog_set_response_sensitive (GTK_DIALOG (launcher_dialog), GTK_RESPONSE_OK, + exo_helper_chooser_get_is_valid (chooser)); +} + + + +/** + * exo_helper_launcher_dialog_new: + * @category : an #ExoHelperCategory. + * + * Allocates a new #ExoHelperLauncherDialog for the + * specified @category. + * + * Return value: the newly allocated #ExoHelperLauncherDialog. + **/ +GtkWidget* +exo_helper_launcher_dialog_new (ExoHelperCategory category) +{ + g_return_val_if_fail (category >= 0 && category < EXO_HELPER_N_CATEGORIES, NULL); + return g_object_new (EXO_TYPE_HELPER_LAUNCHER_DIALOG, "category", category, NULL); +} + + + +/** + * exo_helper_launcher_dialog_get_category: + * @launcher_dialog : an #ExoHelperLauncherDialog. + * + * Returns the #ExoHelperCategory for @launcher_dialog. + * + * Return value: the #ExoHelperCategory for @launcher_dialog. + **/ +ExoHelperCategory +exo_helper_launcher_dialog_get_category (const ExoHelperLauncherDialog *launcher_dialog) +{ + g_return_val_if_fail (EXO_IS_HELPER_LAUNCHER_DIALOG (launcher_dialog), EXO_HELPER_WEBBROWSER); + return launcher_dialog->category; +} + + + +/** + * exo_helper_launcher_dialog_set_category: + * @launcher_dialog : an #ExoHelperLauncherDialog. + * @category : an #ExoHelperCategory. + * + * Sets the #ExoHelperCategory for @launcher_dialog to + * @category. + **/ +void +exo_helper_launcher_dialog_set_category (ExoHelperLauncherDialog *launcher_dialog, + ExoHelperCategory category) +{ + static const gchar *MESSAGES[] = + { + N_("Please choose your preferred Web\n" + "Browser now and click OK to proceed."), + N_("Please choose your preferred Mail Reader\n" + "now and click OK to proceed."), + N_("Please choose your preferred Terminal\n" + "Emulator now and click OK to proceed."), + }; + + /* sanity check the categories */ + g_assert (EXO_HELPER_N_CATEGORIES == G_N_ELEMENTS (MESSAGES)); + + g_return_if_fail (EXO_IS_HELPER_LAUNCHER_DIALOG (launcher_dialog)); + g_return_if_fail (category >= 0 && category < EXO_HELPER_N_CATEGORIES); + + /* setup the new label text */ + gtk_label_set_text (GTK_LABEL (launcher_dialog->label), MESSAGES[category]); + + /* apply the new category */ + launcher_dialog->category = category; + g_object_notify (G_OBJECT (launcher_dialog), "category"); +} + + diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-launcher-dialog.h ./exo-helper/exo-helper-launcher-dialog.h --- ../libexo-without-helpers/exo-helper/exo-helper-launcher-dialog.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-launcher-dialog.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,47 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __EXO_HELPER_LAUNCHER_DIALOG_H__ +#define __EXO_HELPER_LAUNCHER_DIALOG_H__ + +#include + +G_BEGIN_DECLS; + +typedef struct _ExoHelperLauncherDialogClass ExoHelperLauncherDialogClass; +typedef struct _ExoHelperLauncherDialog ExoHelperLauncherDialog; + +#define EXO_TYPE_HELPER_LAUNCHER_DIALOG (exo_helper_launcher_dialog_get_type ()) +#define EXO_HELPER_LAUNCHER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_HELPER_LAUNCHER_DIALOG, ExoHelperLauncherDialog)) +#define EXO_HELPER_LAUNCHER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_HELPER_LAUNCHER_DIALOG, ExoHelperLauncherDialogClass)) +#define EXO_IS_HELPER_LAUNCHER_DIALOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_HELPER_LAUNCHER_DIALOG)) +#define EXO_IS_HELPER_LAUNCHER_DIALOG_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_HELPER_LAUNCHER_DIALOG)) +#define EXO_HELPER_LAUNCHER_DIALOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXOT_TYPE_HELPER_LAUNCHER_DIALOg, ExoHelperLauncherDialogClass)) + +GType exo_helper_launcher_dialog_get_type (void) G_GNUC_CONST; + +GtkWidget *exo_helper_launcher_dialog_new (ExoHelperCategory category) G_GNUC_MALLOC; + +ExoHelperCategory exo_helper_launcher_dialog_get_category (const ExoHelperLauncherDialog *launcher_dialog); +void exo_helper_launcher_dialog_set_category (ExoHelperLauncherDialog *launcher_dialog, + ExoHelperCategory category); + +G_END_DECLS; + +#endif /* !__EXO_HELPER_LAUNCHER_DIALOG_H__ */ diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-utils.c ./exo-helper/exo-helper-utils.c --- ../libexo-without-helpers/exo-helper/exo-helper-utils.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-utils.c Mon Jan 30 19:23:51 2006 @@ -0,0 +1,188 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + + + +/** + * exo_helper_category_from_string: + * @string : string representation of an #ExoHelperCategory. + * @category_return : return location for the #ExoHelperCategory. + * + * Transforms the @string representation of an #ExoHelperCategory to + * an #ExoHelperCategory and places it in @category_return. + * + * Return value: %TRUE if @string was recognized and @category_return + * is set, else %FALSE. + **/ +gboolean +exo_helper_category_from_string (const gchar *string, + ExoHelperCategory *category_return) +{ + GEnumClass *klass; + gboolean found = FALSE; + guint n; + + g_return_val_if_fail (category_return != NULL, FALSE); + + if (G_LIKELY (string != NULL)) + { + klass = g_type_class_ref (EXO_TYPE_HELPER_CATEGORY); + for (n = 0; !found && n < klass->n_values; ++n) + if (g_ascii_strcasecmp (string, klass->values[n].value_nick) == 0) + { + *category_return = klass->values[n].value; + found = TRUE; + } + g_type_class_unref (klass); + } + + return found; +} + + + +/** + * exo_helper_category_to_string: + * @category : an #ExoHelperCategory. + * + * Transforms @category to its canonical string represenation. + * The caller is responsible to free the returned string using + * g_free() when no longer needed. + * + * Return value: the string representation for @category. + **/ +gchar* +exo_helper_category_to_string (ExoHelperCategory category) +{ + GEnumClass *klass; + gchar *string; + + g_return_val_if_fail (category < EXO_HELPER_N_CATEGORIES, NULL); + g_return_val_if_fail (category >= 0, NULL); + + klass = g_type_class_ref (EXO_TYPE_HELPER_CATEGORY); + string = g_strdup (klass->values[category].value_nick); + g_type_class_unref (klass); + + return string; +} + + + +static void +ebox_style_set (GtkWidget *widget, + GtkStyle *style) +{ + static guint recursive = 0; + + if (G_LIKELY (recursive == 0)) + { + ++recursive; + style = gtk_widget_get_style (widget); + gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &style->bg[GTK_STATE_SELECTED]); + --recursive; + } +} + + + +static void +label_style_set (GtkWidget *widget, + GtkStyle *style) +{ + static guint recursive = 0; + + if (G_LIKELY (recursive == 0)) + { + ++recursive; + style = gtk_widget_get_style (widget); + gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &style->fg[GTK_STATE_SELECTED]); + --recursive; + } +} + + + +/** + * exo_helper_create_header: + * @icon : a named icon or %NULL. + * @text : the text to display in the header. + * + * Creates a new header widget for settings dialogs, + * compatible to the one used throughout Xfce. + * + * Return value: the header widget. + **/ +GtkWidget* +exo_helper_create_header (const gchar *icon, + const gchar *text) +{ + PangoAttribute *attribute; + PangoAttrList *attr_list_large_bold; + GtkWidget *label; + GtkWidget *image; + GtkWidget *hbox; + GtkWidget *ebox; + + g_return_val_if_fail (text != NULL, NULL); + + ebox = gtk_event_box_new (); + g_signal_connect_after (G_OBJECT (ebox), "style-set", G_CALLBACK (ebox_style_set), NULL); + + hbox = gtk_hbox_new (FALSE, 12); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 4); + gtk_container_add (GTK_CONTAINER (ebox), hbox); + gtk_widget_show (hbox); + + if (G_LIKELY (icon != NULL)) + { + image = gtk_image_new_from_icon_name (icon, GTK_ICON_SIZE_DIALOG); + gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, TRUE, 0); + gtk_widget_show (image); + } + + label = gtk_label_new (text); + g_signal_connect_after (G_OBJECT (label), "style-set", G_CALLBACK (label_style_set), NULL); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + gtk_widget_show (label); + + /* make the label larger and bold */ + attr_list_large_bold = pango_attr_list_new (); + attribute = pango_attr_scale_new (PANGO_SCALE_LARGE); + attribute->start_index = 0; + attribute->end_index = -1; + pango_attr_list_insert (attr_list_large_bold, attribute); + attribute = pango_attr_weight_new (PANGO_WEIGHT_BOLD); + attribute->start_index = 0; + attribute->end_index = -1; + pango_attr_list_insert (attr_list_large_bold, attribute); + gtk_label_set_attributes (GTK_LABEL (label), attr_list_large_bold); + pango_attr_list_unref (attr_list_large_bold); + + return ebox; +} + + diff -Naur ../libexo-without-helpers/exo-helper/exo-helper-utils.h ./exo-helper/exo-helper-utils.h --- ../libexo-without-helpers/exo-helper/exo-helper-utils.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper-utils.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,36 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __EXO_HELPER_UTILS_H__ +#define __EXO_HELPER_UTILS_H__ + +#include + +G_BEGIN_DECLS; + +gboolean exo_helper_category_from_string (const gchar *string, + ExoHelperCategory *category_return) G_GNUC_INTERNAL; +gchar *exo_helper_category_to_string (ExoHelperCategory category) G_GNUC_INTERNAL G_GNUC_MALLOC; + +GtkWidget *exo_helper_create_header (const gchar *icon, + const gchar *text) G_GNUC_INTERNAL G_GNUC_MALLOC; + +G_END_DECLS; + +#endif /* !__EXO_HELPER_UTILS_H__ */ diff -Naur ../libexo-without-helpers/exo-helper/exo-helper.c ./exo-helper/exo-helper.c --- ../libexo-without-helpers/exo-helper/exo-helper.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,878 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_MEMORY_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include +#include + + + +static void exo_helper_class_init (ExoHelperClass *klass); +static void exo_helper_finalize (GObject *object); +static ExoHelper *exo_helper_new (const gchar *id, + XfceRc *rc); + + + +struct _ExoHelperClass +{ + GObjectClass __parent__; +}; + +struct _ExoHelper +{ + GObject __parent__; + + guint startup_notify : 1; + + gchar *id; + gchar *icon; + gchar *name; + gchar **commands; + gchar **commands_with_parameter; + ExoHelperCategory category; +}; + + + +static GObjectClass *exo_helper_parent_class; + + + +GType +exo_helper_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (ExoHelperClass), + NULL, + NULL, + (GClassInitFunc) exo_helper_class_init, + NULL, + NULL, + sizeof (ExoHelper), + 0, + NULL, + NULL, + }; + + type = g_type_register_static (G_TYPE_OBJECT, I_("ExoHelper"), &info, 0); + } + + return type; +} + + + +static void +exo_helper_class_init (ExoHelperClass *klass) +{ + GObjectClass *gobject_class; + + /* determine the parent type class */ + exo_helper_parent_class = g_type_class_peek_parent (klass); + + gobject_class = G_OBJECT_CLASS (klass); + gobject_class->finalize = exo_helper_finalize; +} + + + +static void +exo_helper_finalize (GObject *object) +{ + ExoHelper *helper = EXO_HELPER (object); + + g_strfreev (helper->commands_with_parameter); + g_strfreev (helper->commands); + g_free (helper->name); + g_free (helper->icon); + g_free (helper->id); + + (*G_OBJECT_CLASS (exo_helper_parent_class)->finalize) (object); +} + + + +static gchar** +substitute_binary (const gchar *commands, + const gchar *binary) +{ + gchar **result; + gchar **s, **t; + gchar *tmp; + + /* split the commands */ + result = g_strsplit (commands, ";", -1); + + /* (pre-)process the result */ + for (s = t = result; *s != NULL; ++s) + { + if (**s == '\0') + { + g_free (*s); + } + else if (binary != NULL) + { + tmp = exo_str_replace (*s, "%B", binary); + g_free (*s); + *t++ = tmp; + } + else + { + *t++ = *s; + } + } + *t = NULL; + + return result; +} + + + +static ExoHelper* +exo_helper_new (const gchar *id, + XfceRc *rc) +{ + const gchar *commands_with_parameter; + const gchar *commands; + const gchar *str; + ExoHelper *helper; + gchar **binaries; + gchar *binary = NULL; + guint n; + + g_return_val_if_fail (id != NULL, NULL); + g_return_val_if_fail (rc != NULL, NULL); + + xfce_rc_set_group (rc, "Desktop Entry"); + + /* allocate a new helper */ + helper = g_object_new (EXO_TYPE_HELPER, NULL); + helper->id = g_strdup (id); + helper->startup_notify = xfce_rc_read_bool_entry (rc, "StartupNotify", FALSE); + + /* verify the type of the desktop file */ + str = xfce_rc_read_entry_untranslated (rc, "Type", NULL); + if (G_UNLIKELY (!exo_str_is_equal (str, "X-XFCE-Helper"))) + goto failed; + + /* determine the category of the helper */ + str = xfce_rc_read_entry_untranslated (rc, "X-XFCE-Category", NULL); + if (!exo_helper_category_from_string (str, &helper->category)) + goto failed; + + /* determine the name of the helper */ + str = xfce_rc_read_entry (rc, "Name", NULL); + if (G_UNLIKELY (str == NULL || *str == '\0')) + goto failed; + helper->name = g_strdup (str); + + /* determine the icon of the helper */ + str = xfce_rc_read_entry_untranslated (rc, "Icon", NULL); + if (G_LIKELY (str != NULL && *str != '\0')) + helper->icon = g_strdup (str); + + /* determine the commands */ + commands = xfce_rc_read_entry_untranslated (rc, "X-XFCE-Commands", NULL); + if (G_UNLIKELY (commands == NULL)) + goto failed; + + /* determine the commands (with parameter) */ + commands_with_parameter = xfce_rc_read_entry_untranslated (rc, "X-XFCE-CommandsWithParameter", NULL); + if (G_UNLIKELY (commands_with_parameter == NULL)) + goto failed; + + /* check if we need binaries for substitution */ + if (strstr (commands, "%B") != NULL || strstr (commands_with_parameter, "%B") != NULL) + { + /* determine the binaries */ + str = xfce_rc_read_entry_untranslated (rc, "X-XFCE-Binaries", NULL); + if (G_UNLIKELY (str == NULL)) + goto failed; + + /* determine the first available binary */ + binaries = g_strsplit (str, ";", -1); + for (binary = NULL, n = 0; binaries[n] != NULL && binary == NULL; ++n) + if (G_LIKELY (binaries[n][0] != '\0')) + binary = g_find_program_in_path (binaries[n]); + g_strfreev (binaries); + + /* check if we found a binary */ + if (G_UNLIKELY (binary == NULL)) + goto failed; + } + + /* substitute the binary (if any) */ + helper->commands = substitute_binary (commands, binary); + helper->commands_with_parameter = substitute_binary (commands_with_parameter, binary); + g_free (binary); + + /* verify that we have atleast one command */ + if (G_UNLIKELY (*helper->commands == NULL || *helper->commands_with_parameter == NULL)) + goto failed; + + return helper; + +failed: + g_object_unref (G_OBJECT (helper)); + return NULL; +} + + + +/** + * exo_helper_get_category: + * @helper : an #ExoHelper. + * + * Returns the #ExoHelperCategory of @helper. + * + * Return value: the #ExoHelperCategory of @helper. + **/ +ExoHelperCategory +exo_helper_get_category (const ExoHelper *helper) +{ + g_return_val_if_fail (EXO_IS_HELPER (helper), EXO_HELPER_WEBBROWSER); + return helper->category; +} + + + +/** + * exo_helper_get_id: + * @helper : an #ExoHelper. + * + * Returns the unique id (the .desktop file basename) of @helper. + * + * Return value: the unique id of @helper. + **/ +const gchar* +exo_helper_get_id (const ExoHelper *helper) +{ + g_return_val_if_fail (EXO_IS_HELPER (helper), NULL); + return helper->id; +} + + + +/** + * exo_helper_get_name: + * @helper : an #ExoHelper. + * + * Returns the (translated) name of the @helper. + * + * Return value: the name of @helper. + **/ +const gchar* +exo_helper_get_name (const ExoHelper *helper) +{ + g_return_val_if_fail (EXO_IS_HELPER (helper), NULL); + return helper->name; +} + + + +/** + * exo_helper_get_icon: + * @helper : an #ExoHelper. + * + * Return the name of the themed icon for @helper or + * the absolute path to an icon file, or %NULL if no + * icon is available for @helper. + * + * Return value: the icon for @helper or %NULL. + **/ +const gchar* +exo_helper_get_icon (const ExoHelper *helper) +{ + g_return_val_if_fail (EXO_IS_HELPER (helper), NULL); + return helper->icon; +} + + + +/** + * exo_helper_get_command: + * @helper : an #ExoHelper. + * + * Returns a reasonable command for @helper. + * + * Return value: a command for @helper. + **/ +const gchar* +exo_helper_get_command (const ExoHelper *helper) +{ + g_return_val_if_fail (EXO_IS_HELPER (helper), NULL); + return *helper->commands_with_parameter; +} + + + +/** + * exo_helper_execute: + * @helper : an #ExoHelper. + * @screen : the #GdkScreen on which to execute @helper or %NULL to use default. + * @parameter : the parameter to pass to @helper (e.g. URL for WebBrowser) or %NULL + * to just run @helper. + * @error : return location for errors or %NULL. + * + * Executes @helper on @screen with the given @parameter. Returns %TRUE if the + * execution succeed, else %FALSE and @error will be set. + * + * Return value: %TRUE on success, %FALSE if @error is set. + **/ +gboolean +exo_helper_execute (ExoHelper *helper, + GdkScreen *screen, + const gchar *parameter, + GError **error) +{ + gboolean succeed = FALSE; + GError *err = NULL; + gchar **commands; + gchar **argv; + gchar *command; + guint n; + + // FIXME: startup-notification + + g_return_val_if_fail (EXO_IS_HELPER (helper), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + g_return_val_if_fail (screen == NULL || GDK_IS_SCREEN (screen), FALSE); + + /* fallback to default screen */ + if (G_UNLIKELY (screen == NULL)) + screen = gdk_screen_get_default (); + + /* determine the command set to use */ + commands = (parameter != NULL) ? helper->commands_with_parameter : helper->commands; + + /* verify that we have atleast one command */ + if (G_UNLIKELY (*commands == NULL)) + { + g_set_error (error, G_SPAWN_ERROR, G_SPAWN_ERROR_INVAL, _("No command specified")); + return FALSE; + } + + /* try to run the helper using the various given commands */ + for (n = 0; commands[n] != NULL; ++n) + { + /* reset the error */ + g_clear_error (&err); + + /* parse the command */ + command = (parameter != NULL) ? exo_str_replace (commands[n], "%s", parameter) : g_strdup (commands[n]); + succeed = g_shell_parse_argv (command, NULL, &argv, &err); + g_free (command); + + /* check if the parsing failed */ + if (G_UNLIKELY (!succeed)) + continue; + + /* try to run the command */ + succeed = gdk_spawn_on_screen (screen, NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &err); + + /* cleanup */ + g_strfreev (argv); + + /* check if the execution was successful */ + if (G_LIKELY (succeed)) + break; + } + + /* propagate the error */ + if (G_UNLIKELY (!succeed)) + g_propagate_error (error, err); + + return succeed; +} + + + + +static void exo_helper_database_class_init (ExoHelperDatabaseClass *klass); +static void exo_helper_database_init (ExoHelperDatabase *database); +static void exo_helper_database_finalize (GObject *object); +static ExoHelper *exo_helper_database_lookup (ExoHelperDatabase *database, + ExoHelperCategory category, + const gchar *id); + + + +struct _ExoHelperDatabaseClass +{ + GObjectClass __parent__; +}; + +struct _ExoHelperDatabase +{ + GObject __parent__; + GHashTable *helpers; +}; + + + +static GObjectClass *exo_helper_database_parent_class; + + + +GType +exo_helper_database_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (ExoHelperDatabaseClass), + NULL, + NULL, + (GClassInitFunc) exo_helper_database_class_init, + NULL, + NULL, + sizeof (ExoHelperDatabase), + 0, + (GInstanceInitFunc) exo_helper_database_init, + NULL, + }; + + type = g_type_register_static (G_TYPE_OBJECT, I_("ExoHelperDatabase"), &info, 0); + } + + return type; +} + + + +static void +exo_helper_database_class_init (ExoHelperDatabaseClass *klass) +{ + GObjectClass *gobject_class; + + /* determine the parent type class */ + exo_helper_database_parent_class = g_type_class_peek_parent (klass); + + gobject_class = G_OBJECT_CLASS (klass); + gobject_class->finalize = exo_helper_database_finalize; +} + + + +static void +exo_helper_database_init (ExoHelperDatabase *database) +{ + database->helpers = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref); +} + + + +static void +exo_helper_database_finalize (GObject *object) +{ + ExoHelperDatabase *database = EXO_HELPER_DATABASE (object); + + g_hash_table_destroy (database->helpers); + + (*G_OBJECT_CLASS (exo_helper_database_parent_class)->finalize) (object); +} + + + +static ExoHelper* +exo_helper_database_lookup (ExoHelperDatabase *database, + ExoHelperCategory category, + const gchar *id) +{ + ExoHelper *helper; + XfceRc *rc; + gchar *file; + gchar *spec; + + g_return_val_if_fail (EXO_IS_HELPER_DATABASE (database), NULL); + g_return_val_if_fail (id != NULL, NULL); + + /* generate the spec for the helper */ + spec = g_strconcat ("xfce4/helpers/", id, ".desktop", NULL); + + /* try to find a cached version */ + helper = g_hash_table_lookup (database->helpers, spec); + + /* load the helper from the file */ + if (G_LIKELY (helper == NULL)) + { + xfce_resource_push_path (XFCE_RESOURCE_DATA, DATADIR); + file = xfce_resource_lookup (XFCE_RESOURCE_DATA, spec); + xfce_resource_pop_path (XFCE_RESOURCE_DATA); + + if (G_LIKELY (file != NULL)) + { + rc = xfce_rc_simple_open (file, TRUE); + if (G_LIKELY (rc != NULL)) + { + helper = exo_helper_new (id, rc); + xfce_rc_close (rc); + } + g_free (file); + } + + /* add the loaded helper to the cache */ + if (G_LIKELY (helper != NULL)) + { + g_hash_table_insert (database->helpers, spec, helper); + spec = NULL; + } + } + + if (G_LIKELY (helper != NULL)) + { + if (exo_helper_get_category (helper) == category) + g_object_ref (G_OBJECT (helper)); + else + helper = NULL; + } + + g_free (spec); + + return helper; +} + + + +/** + * exo_helper_database_get: + * + * Returns a reference on the default #ExoHelperDatabase + * instance. The caller is responsible to free the + * returned object using g_object_unref() when no longer + * needed. + * + * Return value: a reference to the default #ExoHelperDatabase. + **/ +ExoHelperDatabase* +exo_helper_database_get (void) +{ + static ExoHelperDatabase *database = NULL; + + if (G_LIKELY (database == NULL)) + { + database = g_object_new (EXO_TYPE_HELPER_DATABASE, NULL); + g_object_add_weak_pointer (G_OBJECT (database), (gpointer) &database); + } + else + { + g_object_ref (G_OBJECT (database)); + } + + return database; +} + + + +/** + * exo_helper_database_get_default: + * @database : an #ExoHelperDatabase. + * @category : an #ExoHelperCategory. + * + * Returns a reference on the default #ExoHelper for + * the @category in @database or %NULL if no default + * #ExoHelper is registered for @category. + * + * The caller is responsible to free the returned + * object using g_object_unref() when no longer needed. + * + * Return value: the default #ExoHelper for @category + * or %NULL. + **/ +ExoHelper* +exo_helper_database_get_default (ExoHelperDatabase *database, + ExoHelperCategory category) +{ + const gchar *id; + ExoHelper *helper = NULL; + XfceRc *rc; + gchar *key; + + g_return_val_if_fail (EXO_IS_HELPER_DATABASE (database), NULL); + g_return_val_if_fail (category < EXO_HELPER_N_CATEGORIES, NULL); + + rc = xfce_rc_config_open (XFCE_RESOURCE_CONFIG, "xfce4/helpers.rc", TRUE); + if (G_LIKELY (rc != NULL)) + { + key = exo_helper_category_to_string (category); + id = xfce_rc_read_entry_untranslated (rc, key, NULL); + if (G_LIKELY (id != NULL)) + helper = exo_helper_database_lookup (database, category, id); + xfce_rc_close (rc); + g_free (key); + } + + return helper; +} + + + +/** + * exo_helper_database_set_default: + * @database : an #ExoHelperDatabase. + * @category : an #ExoHelperCategory. + * @helper : an #ExoHelper. + * @error : return location for errors or %NULL. + * + * Sets the default #ExoHelper for @category in @database to + * @helper. Returns %TRUE on success, %FALSE if @error is set. + * + * Return value: %TRUE on success, %FALSE if @error is set. + **/ +gboolean +exo_helper_database_set_default (ExoHelperDatabase *database, + ExoHelperCategory category, + ExoHelper *helper, + GError **error) +{ + XfceRc *rc; + gchar *key; + + g_return_val_if_fail (category < EXO_HELPER_N_CATEGORIES, FALSE); + g_return_val_if_fail (EXO_IS_HELPER_DATABASE (database), FALSE); + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + g_return_val_if_fail (EXO_IS_HELPER (helper), FALSE); + + /* open the helpers.rc for writing */ + rc = xfce_rc_config_open (XFCE_RESOURCE_CONFIG, "xfce4/helpers.rc", FALSE); + if (G_UNLIKELY (rc == NULL)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_IO, _("Failed to open helpers.rc for writing")); + return FALSE; + } + + /* save the new setting */ + key = exo_helper_category_to_string (category); + xfce_rc_write_entry (rc, key, exo_helper_get_id (helper)); + xfce_rc_close (rc); + g_free (key); + + return TRUE; +} + + + +static gint +helper_compare (gconstpointer a, + gconstpointer b) +{ + return g_utf8_collate (exo_helper_get_name (a), exo_helper_get_name (b)); +} + + + +/** + * exo_helper_database_get_all: + * @database : an #ExoHelperDatabase. + * @category : an #ExoHelperCategory. + * + * Looks up all available helpers for @category + * in @database, sorted in alphabetic order. + * + * The returned list keeps references on the included + * helpers, so be sure to run + * + * g_list_foreach (list, (GFunc) g_object_unref, NULL); + * g_list_free (list); + * + * when you are done. + * + * Return value: The list of all helpers available + * in @category. + **/ +GList* +exo_helper_database_get_all (ExoHelperDatabase *database, + ExoHelperCategory category) +{ + ExoHelper *helper; + GList *helpers = NULL; + gchar **specs; + gchar *id; + gchar *s; + guint n; + + g_return_val_if_fail (EXO_IS_HELPER_DATABASE (database), NULL); + g_return_val_if_fail (category < EXO_HELPER_N_CATEGORIES, NULL); + + xfce_resource_push_path (XFCE_RESOURCE_DATA, DATADIR); + specs = xfce_resource_match (XFCE_RESOURCE_DATA, "xfce4/helpers/*.desktop", TRUE); + xfce_resource_pop_path (XFCE_RESOURCE_DATA); + + for (n = 0; specs[n] != NULL; ++n) + { + s = strrchr (specs[n], '.'); + if (G_LIKELY (s != NULL)) + *s = '\0'; + + id = strrchr (specs[n], '/'); + id = (id != NULL) ? id + 1 : specs[n]; + + helper = exo_helper_database_lookup (database, category, id); + if (G_LIKELY (helper != NULL)) + helpers = g_list_insert_sorted (helpers, helper, helper_compare); + + g_free (specs[n]); + } + g_free (specs); + + return helpers; +} + + + +/** + * exo_helper_database_get_custom: + * @database : an #ExoHelperDatabase. + * @category : an #ExoHelperCategory. + * + * Returns the custom #ExoHelper set for @database + * or %NULL if no custom #ExoHelper is set for + * @category. + * + * The caller is responsible to free the returned + * object using g_object_unref() when no longer + * needed. + * + * Return value: the custom #ExoHelper for @category + * in @database or %NULL. + **/ +ExoHelper* +exo_helper_database_get_custom (ExoHelperDatabase *database, + ExoHelperCategory category) +{ + gchar *string; + gchar id[256]; + + g_return_val_if_fail (EXO_IS_HELPER_DATABASE (database), NULL); + g_return_val_if_fail (category < EXO_HELPER_N_CATEGORIES, NULL); + + /* determine the id for the custom helper */ + string = exo_helper_category_to_string (category); + g_snprintf (id, sizeof (id), "custom-%s", string); + g_free (string); + + return exo_helper_database_lookup (database, category, id); +} + + + +/** + * exo_helper_database_set_custom: + * @database : an #ExoHelperDatabase. + * @category : an #ExoHelperCategory. + * @command : the custom command. + * + * Sets the custom helper for @category in @database + * to @command. + **/ +void +exo_helper_database_set_custom (ExoHelperDatabase *database, + ExoHelperCategory category, + const gchar *command) +{ + XfceRc *rc; + gchar **argv; + gchar *category_string; + gchar *basename; + gchar *cmdline; + gchar *file; + gchar spec[256]; + + g_return_if_fail (EXO_IS_HELPER_DATABASE (database)); + g_return_if_fail (category < EXO_HELPER_N_CATEGORIES); + g_return_if_fail (command != NULL && *command != '\0'); + + /* determine the spec for the custom helper */ + category_string = exo_helper_category_to_string (category); + g_snprintf (spec, sizeof (spec), "xfce4/helpers/custom-%s.desktop", category_string); + + /* lookup the resource save location */ + file = xfce_resource_save_location (XFCE_RESOURCE_DATA, spec, TRUE); + + /* write the custom helper file */ + rc = xfce_rc_simple_open (file, FALSE); + if (G_LIKELY (rc != NULL)) + { + xfce_rc_set_group (rc, "Desktop Entry"); + xfce_rc_write_bool_entry (rc, "NoDisplay", TRUE); + xfce_rc_write_entry (rc, "Version", "1.0"); + xfce_rc_write_entry (rc, "Encoding", "UTF-8"); + xfce_rc_write_entry (rc, "Type", "X-XFCE-Helper"); + xfce_rc_write_entry (rc, "X-XFCE-Category", category_string); + + /* check if the command includes a parameter */ + cmdline = (strstr (command, "%s") != NULL) ? g_strdup (command) : g_strconcat (command, " \"%s\"", NULL); + + /* use the command line for the CommandsWithParameter */ + xfce_rc_write_entry (rc, "X-XFCE-CommandsWithParameter", cmdline); + + /* try to parse the command line */ + if (g_shell_parse_argv (cmdline, NULL, &argv, NULL)) + { + /* use the basename for Name and Icon */ + basename = g_path_get_basename (*argv); + xfce_rc_write_entry (rc, "Icon", basename); + xfce_rc_write_entry (rc, "Name", basename); + g_free (basename); + + /* use only the binary for the Commands */ + xfce_rc_write_entry (rc, "X-XFCE-Commands", *argv); + + /* cleanup */ + g_strfreev (argv); + } + else + { + xfce_rc_write_entry (rc, "Name", command); + xfce_rc_write_entry (rc, "X-XFCE-Commands", command); + } + + /* save the helper file */ + xfce_rc_close (rc); + + /* cleanup */ + g_free (cmdline); + } + + /* ditch any cached object */ + g_hash_table_remove (database->helpers, spec); + + /* cleanup */ + g_free (category_string); + g_free (file); +} diff -Naur ../libexo-without-helpers/exo-helper/exo-helper.h ./exo-helper/exo-helper.h --- ../libexo-without-helpers/exo-helper/exo-helper.h Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-helper.h Mon Jan 30 19:23:50 2006 @@ -0,0 +1,85 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifndef __EXO_HELPER_H__ +#define __EXO_HELPER_H__ + +#include + +G_BEGIN_DECLS; + +typedef enum /*< enum,prefix=EXO_HELPER >*/ +{ + EXO_HELPER_WEBBROWSER, /*< nick=WebBrowser >*/ + EXO_HELPER_MAILREADER, /*< nick=MailReader >*/ + EXO_HELPER_TERMINALEMULATOR, /*< nick=TerminalEmulator >*/ + EXO_HELPER_N_CATEGORIES, /*< skip >*/ +} ExoHelperCategory; + +typedef struct _ExoHelperClass ExoHelperClass; +typedef struct _ExoHelper ExoHelper; + +#define EXO_TYPE_HELPER (exo_helper_get_type ()) +#define EXO_HELPER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_HELPER, ExoHelper)) +#define EXO_HELPER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_HELPER, ExoHelperClass)) +#define EXO_IS_HELPER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_HELPER)) +#define EXO_IS_HELPER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_HELPER)) +#define EXO_HELPER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_HELPER, ExoHelperClass)) + +GType exo_helper_get_type (void) G_GNUC_CONST; +ExoHelperCategory exo_helper_get_category (const ExoHelper *helper); +const gchar *exo_helper_get_id (const ExoHelper *helper); +const gchar *exo_helper_get_name (const ExoHelper *helper); +const gchar *exo_helper_get_icon (const ExoHelper *helper); +const gchar *exo_helper_get_command (const ExoHelper *helper); +gboolean exo_helper_execute (ExoHelper *helper, + GdkScreen *screen, + const gchar *parameter, + GError **error); + + +#define EXO_TYPE_HELPER_DATABASE (exo_helper_database_get_type ()) +#define EXO_HELPER_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXO_TYPE_HELPER_DATABASE, ExoHelperDatabase)) +#define EXO_HELPER_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), EXO_TYPE_HELPER_DATABASE, ExoHelperDatabaseClass)) +#define EXO_IS_HELPER_DATABASE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EXO_TYPE_HELPER_DATABASE)) +#define EXO_IS_HELPER_DATABASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EXO_TYPE_HELPER_DATABASE)) +#define EXO_HELPER_DATABASE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), EXO_TYPE_HELPER_DATABASE, ExoHelperDatabaseClass)) + +typedef struct _ExoHelperDatabaseClass ExoHelperDatabaseClass; +typedef struct _ExoHelperDatabase ExoHelperDatabase; + +GType exo_helper_database_get_type (void) G_GNUC_CONST; +ExoHelperDatabase *exo_helper_database_get (void); +ExoHelper *exo_helper_database_get_default (ExoHelperDatabase *database, + ExoHelperCategory category); +gboolean exo_helper_database_set_default (ExoHelperDatabase *database, + ExoHelperCategory category, + ExoHelper *helper, + GError **error); +GList *exo_helper_database_get_all (ExoHelperDatabase *database, + ExoHelperCategory category); +ExoHelper *exo_helper_database_get_custom (ExoHelperDatabase *database, + ExoHelperCategory category); +void exo_helper_database_set_custom (ExoHelperDatabase *database, + ExoHelperCategory category, + const gchar *command); + +G_END_DECLS; + +#endif /* !__EXO_HELPER_H__ */ diff -Naur ../libexo-without-helpers/exo-helper/exo-preferred-applications-settings.c ./exo-helper/exo-preferred-applications-settings.c --- ../libexo-without-helpers/exo-helper/exo-preferred-applications-settings.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-preferred-applications-settings.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,78 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + + + +static void +run_dialog (McsPlugin *plugin) +{ + GtkWidget *message; + GError *error = NULL; + gchar *argv[] = { "exo-preferred-applications", NULL }; + + if (!g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, &error)) + { + message = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + "%s.", _("Failed to launch exo-preferred-applications")); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (message), "%s.", error->message); + gtk_dialog_run (GTK_DIALOG (message)); + gtk_widget_destroy (message); + g_error_free (error); + } +} + + + +McsPluginInitResult +mcs_plugin_init (McsPlugin *plugin) +{ + GtkIconTheme *icon_theme; + + /* setup i18n support */ +#ifdef GETTEXT_PACKAGE + xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); +#endif + + /* initialize plugin structure */ + plugin->plugin_name = g_strdup ("exo-preferred-applications"); + plugin->caption = g_strdup (_("Preferred Applications")); + plugin->run_dialog = run_dialog; + + /* lookup the icon (on the default icon theme, *sigh*) */ + icon_theme = gtk_icon_theme_get_default (); + plugin->icon = gtk_icon_theme_load_icon (icon_theme, "preferences-desktop-default-applications", 48, 0, NULL); + + /* if that didn't work, we know where we installed the icon, so load it directly */ + if (G_UNLIKELY (plugin->icon == NULL)) + plugin->icon = gdk_pixbuf_new_from_file (DATADIR "/icons/hicolor/48x48/preferences-desktop-default-applications.png", NULL); + + return MCS_PLUGIN_INIT_OK; +} + + + +MCS_PLUGIN_CHECK_INIT; diff -Naur ../libexo-without-helpers/exo-helper/exo-preferred-applications.desktop.in ./exo-helper/exo-preferred-applications.desktop.in --- ../libexo-without-helpers/exo-helper/exo-preferred-applications.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-preferred-applications.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,14 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Exec=exo-preferred-applications +Icon=preferences-desktop-default-applications +Type=Application +Categories=X-XFCE;Settings;DesktopSettings; +OnlyShowIn=XFCE; +Terminal=false +StartupNotify=true +_GenericName=Preferred Applications +_Name=Xfce 4 Preferred Applications +_Comment=Preferred Applications (Web Browser, Mail Reader and Terminal Emulator) + diff -Naur ../libexo-without-helpers/exo-helper/exo-preferred-applications.in ./exo-helper/exo-preferred-applications.in --- ../libexo-without-helpers/exo-helper/exo-preferred-applications.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/exo-preferred-applications.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,12 @@ +#!/bin/sh +# +# $Id$ +# +# Copyright (c) 2005-2006 Benedikt Meurer +# +# Opens the "Preferred Applications" dialog, which +# allows users to configure their preferred Web +# Browser, Mail Reader and Terminal Emulator. +# + +exec @libexecdir@/exo-helper-@LIBEXO_VERSION_MAJOR@.@LIBEXO_VERSION_MINOR@ --configure diff -Naur ../libexo-without-helpers/exo-helper/helpers/Makefile.am ./exo-helper/helpers/Makefile.am --- ../libexo-without-helpers/exo-helper/helpers/Makefile.am Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/Makefile.am Mon Jan 30 19:23:50 2006 @@ -0,0 +1,37 @@ +# $Id$ + +defaultsdir = $(sysconfdir)/xdg/xfce4 +defaults_DATA = helpers.rc + +desktopdir = $(datadir)/xfce4/helpers +desktop_in_files = \ + Terminal.desktop.in \ + balsa.desktop.in \ + debian-sensible-browser.desktop.in \ + debian-x-terminal-emulator.desktop.in \ + epiphany.desktop.in \ + eterm.desktop.in \ + evolution.desktop.in \ + firefox.desktop.in \ + galeon.desktop.in \ + gnome-terminal.desktop.in \ + kmail.desktop.in \ + konqueror.desktop.in \ + mozilla-browser.desktop.in \ + mozilla-mailer.desktop.in \ + opera-browser.desktop.in \ + opera-mailer.desktop.in \ + thunderbird.desktop.in \ + xterm.desktop.in +desktop_DATA = \ + $(desktop_in_files:.desktop.in=.desktop) +@INTLTOOL_DESKTOP_RULE@ + +DISTCLEANFILES = \ + $(desktop_DATA) + +EXTRA_DIST = \ + $(defaults_DATA) \ + $(desktop_in_files) + +# vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff -Naur ../libexo-without-helpers/exo-helper/helpers/Terminal.desktop.in ./exo-helper/helpers/Terminal.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/Terminal.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/Terminal.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=Terminal +Type=X-XFCE-Helper +_Name=Xfce Terminal +StartupNotify=true +X-XFCE-Binaries=Terminal;xterminal; +X-XFCE-Category=TerminalEmulator +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -x %s; diff -Naur ../libexo-without-helpers/exo-helper/helpers/balsa.desktop.in ./exo-helper/helpers/balsa.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/balsa.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/balsa.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=balsa +Type=X-XFCE-Helper +_Name=Balsa +StartupNotify=false +X-XFCE-Binaries=balsa; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -m "mailto:%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/debian-sensible-browser.desktop.in ./exo-helper/helpers/debian-sensible-browser.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/debian-sensible-browser.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/debian-sensible-browser.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=debian +Type=X-XFCE-Helper +_Name=Debian Sensible Browser +StartupNotify=false +X-XFCE-Binaries=sensible-browser; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/debian-x-terminal-emulator.desktop.in ./exo-helper/helpers/debian-x-terminal-emulator.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/debian-x-terminal-emulator.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/debian-x-terminal-emulator.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=debian +Type=X-XFCE-Helper +_Name=Debian X Terminal Emulator +StartupNotify=false +X-XFCE-Binaries=x-terminal-emulator; +X-XFCE-Category=TerminalEmulator +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -e %s; diff -Naur ../libexo-without-helpers/exo-helper/helpers/epiphany.desktop.in ./exo-helper/helpers/epiphany.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/epiphany.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/epiphany.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=web-browser +Type=X-XFCE-Helper +_Name=Epiphany Web Browser +StartupNotify=true +X-XFCE-Binaries=epiphany; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/eterm.desktop.in ./exo-helper/helpers/eterm.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/eterm.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/eterm.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=Eterm +Type=X-XFCE-Helper +_Name=Enlightened Terminal Emulator +StartupNotify=false +X-XFCE-Binaries=Eterm; +X-XFCE-Category=TerminalEmulator +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B --exec "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/evolution.desktop.in ./exo-helper/helpers/evolution.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/evolution.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/evolution.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=evolution +Type=X-XFCE-Helper +_Name=Novell Evolution +StartupNotify=false +X-XFCE-Binaries=evolution-2.4;evolution-2.3;evolution-2.2;evolution-2.0;evolution-1.6;evolution-1.5;evolution-1.4;evolution; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B "mailto:%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/firefox.desktop.in ./exo-helper/helpers/firefox.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/firefox.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/firefox.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=firefox +Type=X-XFCE-Helper +_Name=Mozilla Firefox +StartupNotify=false +X-XFCE-Binaries=firefox;firefox-gtk2;firefox-gtk;mozilla-firefox; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B -remote "openURL(about:blank,new-window)";%B; +X-XFCE-CommandsWithParameter=%B -remote "openURL(%s,new-window)";%B %s; diff -Naur ../libexo-without-helpers/exo-helper/helpers/galeon.desktop.in ./exo-helper/helpers/galeon.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/galeon.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/galeon.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=galeon +Type=X-XFCE-Helper +_Name=Galeon Web Browser +StartupNotify=true +X-XFCE-Binaries=galeon; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/gnome-terminal.desktop.in ./exo-helper/helpers/gnome-terminal.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/gnome-terminal.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/gnome-terminal.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=gnome-terminal +Type=X-XFCE-Helper +_Name=GNOME Terminal +StartupNotify=true +X-XFCE-Binaries=gnome-terminal;gnometerminal; +X-XFCE-Category=TerminalEmulator +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -x %s; diff -Naur ../libexo-without-helpers/exo-helper/helpers/helpers.rc ./exo-helper/helpers/helpers.rc --- ../libexo-without-helpers/exo-helper/helpers/helpers.rc Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/helpers.rc Mon Jan 30 19:23:50 2006 @@ -0,0 +1,10 @@ +# $Id$ +# +# Default helpers.rc for Xfce's Preferred Applications +# +# Copyright (c) 2005 Benedikt Meurer +# + +WebBrowser=firefox +MailReader=thunderbird +TerminalEmulator=Terminal diff -Naur ../libexo-without-helpers/exo-helper/helpers/kmail.desktop.in ./exo-helper/helpers/kmail.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/kmail.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/kmail.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=kmail +Type=X-XFCE-Helper +_Name=KMail +StartupNotify=true +X-XFCE-Binaries=kmail; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParamter=%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/konqueror.desktop.in ./exo-helper/helpers/konqueror.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/konqueror.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/konqueror.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=konqueror +Type=X-XFCE-Helper +_Name=Konqueror Web Browser +StartupNotify=true +X-XFCE-Binaries=konqueror; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/mozilla-browser.desktop.in ./exo-helper/helpers/mozilla-browser.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/mozilla-browser.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/mozilla-browser.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=mozilla +Type=X-XFCE-Helper +_Name=Mozilla Browser +StartupNotify=false +X-XFCE-Binaries=mozilla;mozilla-gtk2;mozilla-gtk; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B -remote "openURL(about:blank,new-window)";%B; +X-XFCE-CommandsWithParameter=%B -remote "openURL(%s,new-window)";%B %s; diff -Naur ../libexo-without-helpers/exo-helper/helpers/mozilla-mailer.desktop.in ./exo-helper/helpers/mozilla-mailer.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/mozilla-mailer.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/mozilla-mailer.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=mozilla +Type=X-XFCE-Helper +_Name=Mozilla Mail +StartupNotify=false +X-XFCE-Binaries=mozilla;mozilla-gtk2;mozilla-gtk; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B -mail; +X-XFCE-CommandsWithParameter=%B -remote "mailto(%s)";%B -compose "mailto:%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/opera-browser.desktop.in ./exo-helper/helpers/opera-browser.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/opera-browser.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/opera-browser.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=opera +Type=X-XFCE-Helper +_Name=Opera Browser +StartupNotify=false +X-XFCE-Binaries=opera; +X-XFCE-Category=WebBrowser +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -remote "openURL(%s,new-window)";%B "%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/opera-mailer.desktop.in ./exo-helper/helpers/opera-mailer.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/opera-mailer.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/opera-mailer.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=opera +Type=X-XFCE-Helper +_Name=Opera Mail +StartupNotify=false +X-XFCE-Binaries=opera; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -remote "openURL(mailto:%s)";%B "mailto:%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/thunderbird.desktop.in ./exo-helper/helpers/thunderbird.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/thunderbird.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/thunderbird.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=thunderbird +Type=X-XFCE-Helper +_Name=Mozilla Thunderbird +StartupNotify=false +X-XFCE-Binaries=thunderbird;thunderbird-gtk2;thunderbird-gtk;mozilla-thunderbird; +X-XFCE-Category=MailReader +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -remote "mailto(%s)";%B -compose "mailto:%s"; diff -Naur ../libexo-without-helpers/exo-helper/helpers/xterm.desktop.in ./exo-helper/helpers/xterm.desktop.in --- ../libexo-without-helpers/exo-helper/helpers/xterm.desktop.in Thu Jan 1 01:00:00 1970 +++ ./exo-helper/helpers/xterm.desktop.in Mon Jan 30 19:23:50 2006 @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Icon=xterm +Type=X-XFCE-Helper +_Name=X Terminal +StartupNotify=false +X-XFCE-Binaries=xterm; +X-XFCE-Category=TerminalEmulator +X-XFCE-Commands=%B; +X-XFCE-CommandsWithParameter=%B -e %s; diff -Naur ../libexo-without-helpers/exo-helper/main.c ./exo-helper/main.c --- ../libexo-without-helpers/exo-helper/main.c Thu Jan 1 01:00:00 1970 +++ ./exo-helper/main.c Mon Jan 30 19:23:50 2006 @@ -0,0 +1,176 @@ +/* $Id$ */ +/*- + * Copyright (c) 2003-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_MEMORY_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include +#include +#include + + + +static const gchar *CATEGORY_EXEC_ERRORS[] = +{ + N_("Failed to execute default Web Browser"), + N_("Failed to execute default Mail Reader"), + N_("Failed to execute default Terminal Emulator"), +}; + + + +static void +usage (void) +{ + g_print ("%s\n", _("Usage: exo-helper [OPTION...]")); + g_print ("\n"); + g_print ("%s\n", _(" -h, --help Print this help message and exit")); + g_print ("%s\n", _(" -v, --version Print version information and exit")); + g_print ("\n"); + g_print ("%s\n", _(" --configure Open the Preferred Applications\n" + " configuration dialog")); + g_print ("\n"); + g_print ("%s\n", _(" --launch TYPE [PARAMETER] Launch the default helper of TYPE\n" + " with the optional PARAMETER, where\n" + " TYPE is one of the following values.")); + g_print ("\n"); + g_print ("%s\n", _("The following TYPEs are supported for the --launch command:")); + g_print ("\n"); + + /* Note to Translators: Do not translate the TYPEs (WebBrowser, MailReader, TerminalEmulator), + * since the exo-helper utility will not accept localized TYPEs. + */ + g_print ("%s\n", _(" WebBrowser - The preferred Web Browser.\n" + " MailReader - The preferred Mail Reader.\n" + " TerminalEmulator - The preferred Terminal Emulator.")); + g_print ("\n"); +} + + + +int +main (int argc, char **argv) +{ + ExoHelperCategory category; + ExoHelperDatabase *database; + ExoHelper *helper; + GtkWidget *dialog; + GError *error = NULL; + gint result = EXIT_SUCCESS; + + /* sanity check helper categories */ + g_assert (EXO_HELPER_N_CATEGORIES == G_N_ELEMENTS (CATEGORY_EXEC_ERRORS)); + +#ifdef GETTEXT_PACKAGE + /* setup i18n support */ + xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); +#endif + + /* initialize Gtk+ */ + gtk_init (&argc, &argv); + + /* setup default window icon */ + gtk_window_set_default_icon_name ("preferences-desktop-default-applications"); + + /* check for the action to perform */ + if (argc == 2 && strcmp (argv[1], "--configure") == 0) + { + dialog = exo_helper_chooser_dialog_new (); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + } + else if ((argc == 3 || argc == 4) && strcmp (argv[1], "--launch") == 0) + { + /* try to parse the type */ + if (!exo_helper_category_from_string (argv[2], &category)) + { + g_warning (_("Invalid helper type `%s'"), argv[2]); + return EXIT_FAILURE; + } + + /* determine the default helper for the category */ + database = exo_helper_database_get (); + helper = exo_helper_database_get_default (database, category); + + /* check if we have a valid helper */ + if (G_UNLIKELY (helper == NULL)) + { + /* ask the user to choose a default helper for category */ + dialog = exo_helper_launcher_dialog_new (category); + if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) + helper = exo_helper_database_get_default (database, category); + gtk_widget_destroy (dialog); + } + + /* release our reference on the database */ + g_object_unref (G_OBJECT (database)); + + /* check if we have a valid helper now */ + if (G_LIKELY (helper != NULL)) + { + /* try to execute the helper with the given parameter */ + if (!exo_helper_execute (helper, NULL, (argc > 3) ? argv[3] : NULL, &error)) + { + dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, + "%s.", _(CATEGORY_EXEC_ERRORS[category])); + gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s.", error->message); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); + g_error_free (error); + result = EXIT_FAILURE; + } + g_object_unref (G_OBJECT (helper)); + } + } + else if (argc == 2 && strcmp (argv[1], "--help") == 0) + { + usage (); + } + else if (argc == 2 && strcmp (argv[1], "--version") == 0) + { + g_print (_("%s (Xfce %s)\n\n" + "Copyright (c) 2003-2006\n" + " os-cillation e.K. All rights reserved.\n\n" + "Written by Benedikt Meurer .\n\n" + "Built with Gtk+-%d.%d.%d, running Gtk+-%d.%d.%d.\n\n" + "Please report bugs to <%s>.\n"), + PACKAGE_STRING, xfce_version_string (), + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION, + gtk_major_version, gtk_minor_version, gtk_micro_version, + PACKAGE_BUGREPORT); + } + else + { + result = EXIT_FAILURE; + usage (); + } + + return result; +} diff -Naur ../libexo-without-helpers/exo-open/Makefile.am ./exo-open/Makefile.am --- ../libexo-without-helpers/exo-open/Makefile.am Thu Jan 1 01:00:00 1970 +++ ./exo-open/Makefile.am Mon Jan 30 19:23:55 2006 @@ -0,0 +1,26 @@ +# $Id$ + +INCLUDES = \ + -I$(top_srcdir) \ + -DEXO_API_SUBJECT_TO_CHANGE \ + -DG_LOG_DOMAIN=\"exo-open\" \ + -DPACKAGE_LOCALE_DIR=\"$(localedir)\" + +bin_PROGRAMS = \ + exo-open + +exo_open_SOURCES = \ + main.c + +exo_open_CFLAGS = \ + $(GTK_CFLAGS) \ + $(LIBXFCE4UTIL_CFLAGS) + +exo_open_LDFLAGS = \ + -no-undefined + +exo_open_LDADD = \ + $(GTK_LIBS) \ + $(top_builddir)/exo/libexo-$(LIBEXO_VERSION_MAJOR).$(LIBEXO_VERSION_MINOR).la + +# vi:set ts=8 sw=8 noet ai nocindent syntax=automake: diff -Naur ../libexo-without-helpers/exo-open/main.c ./exo-open/main.c --- ../libexo-without-helpers/exo-open/main.c Thu Jan 1 01:00:00 1970 +++ ./exo-open/main.c Mon Jan 30 19:23:55 2006 @@ -0,0 +1,141 @@ +/* $Id$ */ +/*- + * Copyright (c) 2005-2006 Benedikt Meurer . + * + * 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., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#ifdef HAVE_MEMORY_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include + +#include + + + +static void +usage (void) +{ + g_print ("%s\n", _("Usage: exo-open [URLs...]")); + g_print ("%s\n", _(" exo-open --launch TYPE [PARAMETERs...]")); + g_print ("\n"); + g_print ("%s\n", _(" -h, --help Print this help message and exit")); + g_print ("%s\n", _(" -v, --version Print version information and exit")); + g_print ("\n"); + g_print ("%s\n", _(" --launch TYPE [PARAMETERs...] Launch the preferred application of\n" + " TYPE with the optional PARAMETERs, where\n" + " TYPE is one of the following values.")); + g_print ("\n"); + g_print ("%s\n", _("The following TYPEs are supported for the --launch command:")); + g_print ("\n"); + + /* Note to Translators: Do not translate the TYPEs (WebBrowser, MailReader, TerminalEmulator), + * since the exo-helper utility will not accept localized TYPEs. + */ + g_print ("%s\n", _(" WebBrowser - The preferred Web Browser.\n" + " MailReader - The preferred Mail Reader.\n" + " TerminalEmulator - The preferred Terminal Emulator.")); + g_print ("\n"); + g_print ("%s\n", _("If you don't specify the --launch option, exo-open will open all specified\n" + "URLs with their preferred URL handlers. Else, if you specify the --launch\n" + "option, you can select which preferred application you want to run, and\n" + "pass additional parameters to the application (i.e. for TerminalEmulator\n" + "you can pass the command line that should be run in the terminal).")); + g_print ("\n"); +} + + + +int +main (int argc, char **argv) +{ + GError *error = NULL; + gchar *parameter; + gint result = EXIT_SUCCESS; + +#ifdef GETTEXT_PACKAGE + /* setup i18n support */ + xfce_textdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR, "UTF-8"); +#endif + + /* initialize Gtk+ */ + gtk_init (&argc, &argv); + + /* check what to do */ + if (argc == 2 && (strcmp (argv[1], "--help") == 0 || strcmp (argv[1], "-h") == 0)) + { + usage (); + } + else if (argc == 2 && (strcmp (argv[1], "--version") == 0 || strcmp (argv[1], "-v") == 0)) + { + g_print ("%s %s\n\n", g_get_prgname (), PACKAGE_VERSION); + g_print (_("Copyright (c) 2005-2006\n" + " os-cillation e.K. All rights reserved.\n\n" + "Written by Benedikt Meurer .\n\n")); + g_print (_("%s comes with ABSOLUTELY NO WARRANTY,\n" + "You may redistribute copies of %s under the terms of\n" + "the GNU Lesser General Public License which can be found in the\n" + "%s source package.\n\n"), g_get_prgname (), g_get_prgname (), PACKAGE_TARNAME); + g_print (_("Please report bugs to <%s>.\n"), PACKAGE_BUGREPORT); + } + else if (argc >= 3 && strcmp (argv[1], "--launch") == 0) + { + /* combine all specified parameters to one parameter string */ + parameter = (argc > 3) ? g_strjoinv (" ", argv + 3) : NULL; + + /* run the preferred application */ + if (!exo_execute_preferred_application (argv[2], parameter, NULL, NULL, &error)) + { + g_fprintf (stderr, "%s: %s.\n", g_get_prgname (), error->message); + g_error_free (error); + } + + /* cleanup */ + g_free (parameter); + } + else if (argc >= 2 && strcmp (argv[1], "--launch") != 0) + { + /* open all specified urls */ + for (argv += 1; *argv != NULL; ++argv) + { + if (!exo_url_show (*argv, NULL, &error)) + { + g_fprintf (stderr, "%s: %s.\n", g_get_prgname (), error->message); + result = EXIT_FAILURE; + g_error_free (error); + break; + } + } + } + else + { + result = EXIT_FAILURE; + usage (); + } + + return result; +} diff -Naur ../libexo-without-helpers/icons/48x48/Makefile.am ./icons/48x48/Makefile.am --- ../libexo-without-helpers/icons/48x48/Makefile.am Thu Jan 1 01:00:00 1970 +++ ./icons/48x48/Makefile.am Mon Jan 30 19:23:54 2006 @@ -0,0 +1,10 @@ +# $Id$ + +iconsdir = $(datadir)/icons/hicolor/48x48/apps +icons_DATA = \ + preferences-desktop-default-applications.png + +EXTRA_DIST = \ + $(icons_DATA) + +# vi:set ts=8 sw=8 noet ai nocindent: diff -Naur ../libexo-without-helpers/icons/Makefile.am ./icons/Makefile.am --- ../libexo-without-helpers/icons/Makefile.am Thu Jan 1 01:00:00 1970 +++ ./icons/Makefile.am Mon Jan 30 19:23:54 2006 @@ -0,0 +1,6 @@ +# $Id$ + +SUBDIRS = \ + 48x48 + +# vi:set ts=8 sw=8 noet ai nocindent: diff -Naur ../libexo-without-helpers/po/.intltool-merge-cache ./po/.intltool-merge-cache --- ../libexo-without-helpers/po/.intltool-merge-cache Thu Jan 1 01:00:00 1970 +++ ./po/.intltool-merge-cache Mon Jan 30 19:23:55 2006 @@ -0,0 +1,297 @@ +jaActive item border color有効アイテムの枠の色de --static Generate static symbols + --static Statische Symbole erzeugen +caModel column used to retrieve the icon pixbuf fromColumna del model d'on obtenir la icona de la memòria de píxelen_GB_Text only_Text onlyjaCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. All rights reserved. + +Benedikt Meurer が作成しました。 + +en_GBIcon View ModelIcon View Modelde %s [options] --build-list [[name file]...] + %s [Optionen] --build-list [[Name Datei]...] +elSpacingΔιάστιχοfrThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allLa position préférée pour mettre la chaîne en ellipse, si le cell renderer n'a pas assez de place pour afficher la chaîne en entier, le cas échéanten_GB_Icons only_Icons onlyes_Text only_Texto solamentefiSelection Box ColorValintalaatikon väript_BRCustomize Toolbar...Personalizar Barra de Ferramentas...fiCursor item border colorOsoitinkohteen reunuksen väricaNumber of columnsNúmero de columneselModel column used to retrieve the icon pixbuf fromΤο μοντέλο στήλης για τη λήψη του pixbuf εικονιδίουfiThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allKohta, josta merkkijono pyritään tarvittaessa lyhentämään, jos nimikkeellä ei ole tarpeeksi tilaa merkkijonon näyttämiseen.es --build-list Parse (name, file) pairs + --build-list Parsear pares (nombre, archivo) +jaColumn Spacing表示欄スペースfi %s [options] --build-list [[name file]...] + %s [valitsimet] --build-list [[nimi tiedosto]...] +dePlease report bugs to <%s>. +Bitte melden Sie Fehler an <%s> +caWhether the children should be all the same sizeSi tots els fills han de tenir el mateix tamanyjaText for I_mportant Icons重要アイコンに文字を添える(_M)pt_BRActive item text colorCor de texto de ítem ativacaNumber of columns to displayEl nombre de columnes a mostrarjaThe amount of space between two consecutive rows二つの連続する表示列の間隔です。pt_BRActive item border colorCor de borda de ítem ativacaText columnColumna de textes --name=identifier C macro/variable name + --name=identificador macro C/nombre de variable +elToolbar _Style_Στυλ εργαλειοθήκηςfiSeparatorErotinen_GBActive item indexActive item indexfiPixbuf columnPixbuf-sarakecaCursor item fill colorCursor emplenat de colorpt_BREllipsize setConjunto de elipsarelModel column used to retrieve the text fromΤο μοντέλο στήλης για τη λήψη του κειμένουfrOpacity of the selection boxOpacité de la boite de sélectionpt_BRDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Arraste um ítem sobre a barra de ferramentas para adicioná-lo, a partir da barra de ferramentas na tabela de itens para removê-lo.pt_BRModel column used to retrieve the icon pixbuf fromColuna de modelo usada para retirar o ícone pixbuf delaelThe amount of space between two consecutive rowsΤο διάστημα μεταξύ δυο συνεχόμενων γραμμώνjaSelection Box Alpha選択ボックスのα値fr --static Generate static symbols + --static Générer les symboles static +el -v, --version Print version information and exit + -v, --version Εμφανίζει τις πληροφορίες έκδοσης +elText for _All IconsΚείμενο για Όλ_α τα Εικονίδιαde --extern Generate extern symbols + --extern Externe Symbole erzeugen +el_Desktop Default_Προεπιλογή επιφάνειας εργασίαςen_GBIcon Bar ModelIcon Bar ModelfrUsage: %s [options] [file] +Usage : %s [options] [fichier] +pt_BRText for _All IconsTexto p_ara Todos os Íconeses%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s se ofrece ABSOLUTAMENTE SIN GARANTIA, +Usted puede redistribuir copias de %s bajo los terminos de +la Licencia Publica General Menor GNU, la cual se encuentra +en el paquete de fuentes de %s. + +jaThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allセル・レンダラーが全ての文字列を表示するのに十分なスペースが無い場合や、まったく無い場合に文字列を省略する優先箇所です。fi_Text onlyPelkkä t_ekstipt_BRActive item indexÍndice de item ativoesNumber of columns to displayNumero de columnas a mostrarjaCursor item border colorカーソル・アイテムの枠の色jaUsage: %s [options] [file] +使用法: %s [オプション] [ファイル] +en_GBModel column used to retrieve the text fromModel column used to retrieve the text frompt_BRPlease report bugs to <%s>. +Por favor, relate bugs para <%s>. +frNumber of columnsNombre de colonnespt_BR --static Generate static symbols + --static Gera símbolos estáticos +esModel for the icon barModelo para la barra de iconosen_GBEllipsizeEllipsizefiModel column used to retrieve the text fromMallin sarake, josta teksti noudetaanelIcon View ModelΜοντέλο προβολής εικονιδίουde -v, --version Print version information and exit + -v, --verison Programmversion anzeigen +pt_BRSelection Box ColorCor de Caixa de SeleçãoelColumn spacingΔιάστιχο στηλώνfrSpacingEspaceelSpace which is inserted between grid columnΤο διάστημα που εισάγεται ανάμεσα στα κελιά στηλών πλέγματοςesText for I_mportant IconsTexto para los iconos _Importantesfr --extern Generate extern symbols + --extern Générer les symboles extern +frIcon Bar ModelModèle de barre d'icônescaSelection modeMode de selecciópt_BR_Add a new toolbar_Adicionar uma nova barra de ferramentael --name=identifier C macro/variable name + --name=αναγνωριστικό Όνομα μεταβλητής / μακροεντολής C +de_Remove ToolbarWerkzeugleiste _entfernenfr_Remove ToolbarSupp_rimer une barre d'outilsfrModel for the icon barModèle pour la barre d'icônesja %s [options] --build-list [[name file]...] + %s [オプション] --build-list [[名前 ファイル]...] +jaModel column used to retrieve the text from文字を取得するために使用されるモデル欄です。pt_BRThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allO lugar preferido para elipsar a string, se o rótulo não tiver espaço suficiente para mostrar a string inteira, se absolutamentedeDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Ziehen Sie ein Objekt auf die obigen Werkzeugleisten und legen Sie es dort ab, um es hinzuzufügen oder umgekehrt, um es zu entfernen.deEllipsize setAbkürzen gesetztes_Remove ToolbarBo_rrar barra de herramientaselCustomize Toolbar...Προσαρμογή Εργαλειθήκης...fiThe selection modeValintatapaesPixbuf columnColumna PixbufcaSelection Box AlphaAlfa de la caixa de selecciójaCursor item fill colorカーソル・アイテムの塗潰し色elCursor item text colorΧρώμα κειμένου κέρσοραpt_BROpacity of the selection boxOpacidade da caixa de seleçãoesUsage: %s [options] [file] +Uso: %s [opciones] [archivo] +esWindow groupGrupo de ventanaspt_BRSpace which is inserted at the edges of the icon viewEspaço que é inserido nos limites da visualização de íconefrActive item border colorActiver la couleur du bord de l'élémentesReorderableReordenableelRow SpacingΔιάστημα γραμμώνfiActive item text colorAktiivisen kohteen tekstin värifiWhether this tag affects the ellipsize modeVaikuttaako tämä tunniste lyhennystilaanjaWhether this tag affects the ellipsize modeこのタグが中略モードに影響を及ぼすかどうかを設定します。jaThe model for the icon viewアイコン表示のためのモデルです。fiSelection Box AlphaValintalaatikon alphaen_GBThe orientation of the iconbarThe orientation of the iconbarja_Text only文字のみ(_T)frMarginMargefrSession restart commandCommande de redémarrage de sessionjaThe selection mode選択モードです。caActiveActiupt_BRWhether this tag affects the ellipsize modeSe este rótulo afeta o modo de elipsarelThe model for the icon viewΤο μοντέλο για την προβολή εικονιδίουjaColumn spacing表示欄の間隔jaText column文字欄jaView is reorderable表示は並べ替え可能です。en_GBModel column used to retrieve the icon pixbuf fromModel column used to retrieve the icon pixbuf frompt_BRReorderableReordenávelelThe orientation of the iconbarΟ προσαναταλισμός του iconbarpt_BRView is reorderableVisualização é reordenáveljaSpace which is inserted at the edges of the icon viewアイテム表示の端に挟まれるスペースです。caColumn SpacingEspaiat entre columnesel%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s διανέμεται ΧΩΡΙΣ ΑΠΟΛΥΤΩΣ ΚΑΜΙΑ ΕΓΓΥΗΣΗ, +Μπορείτε να αναδιανέμεται αντίγραφα του %s υπό τους όρους +της άδειας GNU Lesser General Public License η οποία μπορεί +να βρεθεί μέσα στο πακέτο με τον πηγαίο κώδικα του %s. + +elSelection modeΛειτουργία επιλογήςen_GBOpacity of the selection boxOpacity of the selection boxes_Desktop DefaultEscritorio por _DefectoesWhether this tag affects the ellipsize modeSi esta funcion afecta el modo ElipsarjaCustomize Toolbar...ツールバーのカスタマイズ...pt_BRRestart commandComando de reiníciojaSeparatorセパレーターjaNumber of columns to display表示する表示欄の数です。caCursor item border colorCursor amb vora de colorelView is reorderableΗ προβολή έχει δυνατότητα αναταξινόμησηςpt_BREllipsizeElipsarjaActiveアクティブel --static Generate static symbols + --static Δημιουργία στατικών συμβόλων +es --static Generate static symbols + --static Generar simbolos estaticos +caOrientationOrientaciófi_Icons onlyPelkät _kuvakkeeten_GBThe selection modeThe selection modecaText for I_mportant IconsText per les icones i_mportantsjaSession restart commandセッションを再起動するコマンドです。deText for I_mportant IconsText für _wichtige Icons anzeigenpt_BRCursor item text colorCor de texto de ítem de cursoren_GBDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Drag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.esHow the text and icon of each item are positioned relative to each otherComo el texto y el icono de cada item son posicionados entre sifrView is reorderableLa vue est réordonnablefrThe amount of space between two consecutive columnsLa quantité d'espace entre deux colonnes consécutivespt_BRText for I_mportant IconsTexto para Ícones Importantesen_GBCursor item fill colorCursor item fill colouresText for _All IconsTexto p_ara todos los iconoscaMarkup columnColumna d'etiquetatgeesSelection modeModo de seleccionfiModel for the icon barKuvakepalkin malliesSpace which is inserted between grid rowsEspacio que se inserta entre filases_Icons only_Iconos solamentefr -h, --help Print this help message and exit + -h, --help Afficher ce message d'aide et quitter +elCursor item border colorΧρώμα περιγράμματος κέρσοραesPlease report bugs to <%s>. +Por favor, reporte errores a <%s>. +pt_BRWidth for each itemLargura de cada ítemde --build-list Parse (name, file) pairs + --build-list (Name, Datei) Paare parsen +fi_Desktop DefaultTyöpöydän _oletuselSpace which is inserted between cells of an itemΤο διάστημα που εισάγεται ανάμεσα στα κελιά ενός στοιχείουesThe model for the icon viewEl modelo de vista de iconofr_Icons only_Icônes uniquementen_GBActiveActiveesWidth for each itemAncho de cada itemfr -v, --version Print version information and exit + -v, --version Afficher les informations de version et quitter +jaDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.追加するにはアイテムをツールバーの上にドラッグして下さい、削除するにはツールバーからドラッグして下さい。caThe amount of space between two consecutive rowsL'espai deixat entre dues files consecutivesen_GBPixbuf columnPixbuf columnes_Add a new toolbarAgregar una nueva barra de herramientasesModel column used to retrieve the icon pixbuf fromModelo de columna desde donde recuperar el icono pixbufca -v, --version Print version information and exit + -v, --version Mostra la versió i surt +caCursor item text colorCursor amb text de colorelCursor item fill colorΧρώμα γεμίσματος κέρσοραjaSpace which is inserted between cells of an itemアイテムのセルの間に挟まれるスペースです。frColumn spacingEspace de colonneen_GBSeparatorSeparatorelDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Σύρετε ένα αντικείμενο στις εργαλειοθήκες παραπάνω για να το προσθέσετε, και από τις εργαλειοθήκες στον πίνακα αντικειμένων για να το αφαιρέσετε.elSpace which is inserted between grid rowsΤο διάστημα που εισάγεται ανάμεσα στα κελιά γραμμών πλέγματοςelThe selection modeΗ λειτουργία επιλογήςesNumber of columnsNumero de columnaspt_BR_Remove Toolbar_Remover Barra de FerramentasfrPlease report bugs to <%s>. +S'il vous plaît, reportez tout bogue à <%s>. +fiText for _All IconsTeksti k_aikille kuvakkeillept_BR_Text onlyApenas _Textopt_BRModel for the icon barModelo para a barra de íconefiPlease report bugs to <%s>. +Ilmoitathan ohjelmistovirheet osoitteeseen <%s>. +caRow SpacingEspaiat de filescaThe orientation of the iconbarOrienctació del plafó d'iconesfrActive item indexActiver l'élément indexéesCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Todos los derechos reservados. + +Escrito por Benedikt Meurer . + +pt_BRThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allO lugar preferido para elipsar a string, se o renderizador de célulanão tiver espaço suficiente para mostrar a string inteira, se absolutamentedeCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Alle Rechte vorbehalten. + +Entwickelt von Benedikt Meurer . + +elThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allΗ προτιμώμενη θέση για τη χρήση αποσιωπητικών στο αλφαριθμητικό, αν η εργασία απόδοσης κελιού δεν έχει αρκετό χώρο για να το εμφανίσει ολόκληροpt_BRRow SpacingEspaçamento de LinhaelThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allΗ προτιμώμενη θέση για την αποσιώπηση αλφαριθμητικού, αν η ετικέτα δεν έχει αρκετό χώρο για την εμφάνιση ολόκληρου του αλφαριθμητικούcaColumn spacingEspaiat entre columnesfiMarkup columnMerkkaussarakejaActive item fill color有効アイテムの塗潰し色frColor of the selection boxCouleur de la boite de sélectionpt_BRPixbuf columnColuna PixbuffrColumn SpacingEspace de colonneesSelection Box ColorColor de caja de seleccionesCustomize Toolbar...Personalizar barra de herramientas...caSession restart commandOrdre per reiniciar la sessiócaMarginMargeesActive item indexIndice de item activoesSeparatorSeparadoresModel column used to retrieve the text fromModelo de columna desde donde recuperar el textopt_BRNumber of columns to displayNúmero de colunas para mostrarjaPixbuf columnピクセルバッファ欄caThe model for the icon viewEl model per la vista d'iconescaEllipsize setActiva punts suspensiusfiText columnTekstisarakeelOpacity of the selection boxΑδιαφάνεια κουτιού επιλογήςjaToolbar _Styleツールバーのスタイル(_S)caThe selection modeEl mode de seleccióel_Icons only_Εικονίδια μόνοcaWindow groupGrup de finestrescaSelection Box ColorColor de la caixa de seleccióca --name=identifier C macro/variable name + --name=identifier nom de la macro de C +ja_Icons onlyアイコンのみ(_I)frText for _All IconsTexte pour t_outes les icônesfrNumber of columns to displayNombre de colonnes à afficherfiRestart commandUudelleenkäynnistyskomentoesOpacity of the selection boxOpacidad de la caja de seleccionjaSpacingスペースelWindow group leaderΑρχηγός ομάδας παραθύρωνdeEllipsizeAbkürzenen_GB_Remove Toolbar_Remove ToolbarcaThe amount of space between two consecutive columnsL'espai deixat entre dues columnes consecutivesjaIcon View Modelアイコン表示モデルfiCursor item fill colorOsoitinkohteen täyttöväricaModel for the icon barModel pel plafó d'iconacaRow spacingEspaiat entre filespt_BRColumn SpacingEspaçamento de ColunaelThe amount of space between two consecutive columnsΤο διάστημα μεταξύ δυο συνεχόμενων στηλώνelModel column used to retrieve the text if using Pango markupΤο μοντέλο στήλης για τη λήψη του κειμένου, στην περίπτωση χρήσης σήμανσης PangofiUsage: %s [options] [file] +Käyttö: %s [valitsimet] [tiedosto] +esCursor item fill colorColor de relleno del item cursorca_Desktop Default_Escriptori predeterminatfiWindow groupIkkunaryhmäelText columnΣτήλη κειμένουcaActive item fill colorActiva element emplenat de colorpt_BRThe model for the icon viewO modelo para a visualização de íconept_BR -h, --help Print this help message and exit + -h, --help Mostra esta mensagem de ajuda e sai +fiSelection modeValintatapaelIcon Bar ModelΜοντέλο IconbarelWidth for each itemΠλάτος για κάθε αντικείμενοelNumber of columns to displayΟ αριθμός των στηλών που προβάλλεταιfiSession restart commandIstunnon uudelleenkäynnistyskomentofi_Add a new toolbar_Lisää uusi välinepalkkien_GBModel for the icon barModel for the icon barfrWindow groupGroupe de fenêtresde_Add a new toolbarEine _neue Werkzeugleiste hinzufügenjaWidth for each itemアイテムの幅esActive item fill colorColor de relleno del item activoelEllipsize setΟρισμός Αποσιωπητικώνen_GBCursor item border colorCursor item border colouresColor of the selection boxColor de caja de seleccionfiDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Lisää ja poista ylläolevissa välinepalkeissa olevia kohteita raahaamalla.jaNumber of columns表示欄の数en_GBHow the text and icon of each item are positioned relative to each otherHow the text and icon of each item are positioned relative to each otherelThe width used for each itemΤο πλάτος που χρησιμοποιήται για κάθε στοιχείοfrWhether this tag affects the ellipsize modeSi cette balise affecte ou non le mode de mise en ellipsept_BRToolbar _StyleE_stilo de Barra de FerramentaelPixbuf columnΣτήλη PixbufjaHow the text and icon of each item are positioned relative to each otherそれぞれのアイテムの文字とアイコンがお互いにどの位置に置かれるかを選択します。elEllipsizeΧρήση αποσιωπητικώνpt_BR --extern Generate extern symbols + --extern Gera símbolos externos +jaOrientation方向pt_BRSpace which is inserted between cells of an itemEspaço que é inserido entre células de um ítemfrHow the text and icon of each item are positioned relative to each otherComment le texte et l'icône sont positionnés relativement l'un par rapport à l'autrefrRestart commandCommande de redémarragept_BRHow the text and icon of each item are positioned relative to each otherComo o texto e o ícone de cada ítem são posicionados relativamente a cada umfiCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Kaikki oikeudet pidätetään. + +Kirjoittanut Benedikt Meurer . + +pt_BR %s [options] --build-list [[name file]...] + %s [opções] --build-list [[nome do arquivo]...] +caThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allEl lloc preferit per posar punts suspensius a la cadena, si l'etiqueta no +té prou espai per mostrar tota la cadenafiActive item fill colorAktiivisen kohteen täyttövärifrPixbuf columnColonne pixbuffiThe model for the icon viewKuvakenäkymän mallicaActive item text colorActiva element amd text de colorelHow the text and icon of each item are positioned relative to each otherΠως το κείμενο και κάθε στοιχείο τοποθετούνται σχετικά το ένα με το άλλοfrActive item fill colorActiver la couleur de remplissage de l'élémentesView is reorderableLa vista es reordenablefr --build-list Parse (name, file) pairs + --build-list Analyser les paires (nom, fichier) +caThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allEl lloc triat per inserir els punts suspensius si el representador de +cadenes no té espai suficient per mostrar tota la cadenaelActiveΕνεργόel --build-list Parse (name, file) pairs + --build-list Ανάλυση ζευγαριών (όνομα, αρχείο) +esMarkup columnColumna de markupjaRow spacing表示列の間隔caModel column used to retrieve the text if using Pango markupColumna del model d'on obtenir el text si es fa servir el marcatge Pangopt_BRActive item fill colorCor de preenchimento de ítem ativaesWindow group leaderLider de grupo de ventanasfiEllipsizeLyhennäcaRestart commandReinicia ordrede_Icons onlyNur _Icons anzeigenesMarginMargenesSpace which is inserted between cells of an itemEspacio que se inserta entre celdas de un itemcaPlease report bugs to <%s>. +Per favor, informi dels errors a <%s>. +fi --build-list Parse (name, file) pairs + --build-list Lue (nimi, tiedosto)-parit +frCustomize Toolbar...Personnaliser une barre d'outils...elUsage: %s [options] [file] +Χρήση: %s [επιλογές] [αρχείο] +pt_BRMarginMargempt_BR_Icons onlyApenas _Íconesfi -v, --version Print version information and exit + -v, --version Näytä versiotiedot ja poistu +en_GBOrientationOrientationfrText for I_mportant IconsTexte pour les icônes i_mportanteselSelection Box AlphaΤιμή Διαφάνειας Κουτιού Επιλογήςpt_BRText columnColuna de textojaModel column used to retrieve the icon pixbuf fromアイコンのピクセルバッファを取得するために使用されるモデル欄です。jaWindow groupウィンドウグループfi%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s ei ole MINKÄÄNLAISEN TAKUUN ALAINEN. +Voit levittää ja kopioida %s -ohjelmistoa GNU Lesser General +Public License -lisenssin ehtojen mukaisesti. Lisenssin löydät +%s -lähdekoodipakkauksesta. + +pt_BRSpace which is inserted between grid columnEspaço que é inserido entre colunas de gridca_Text onlyNomés _textfi --name=identifier C macro/variable name + --name=tunniste C-makron tai muuttujan nimi +fiColor of the selection boxValintalaatikon väript_BR -v, --version Print version information and exit + -v, --version Mostra informação de versão e sai +pt_BRThe selection modeO modo de seleçãojaHomogeneous均質性frSelection modeMode de sélectionjaEllipsize set中略をセットfrThe amount of space between two consecutive rowsLa quantité d'espace entre deux lignes consicutivesesSelection Box AlphaAlfa de la caja de seleccionca --static Generate static symbols + --static Genera símbols estàtics +jaSelection mode選択モードfrText columnColonne textejaWhether the children should be all the same size子ウィンドウを全て同じサイズにするかどうかを指定します。en_GBActive item border colorActive item border colouren_GBActive item fill colorActive item fill colourjaSpace which is inserted between grid columnグリッド欄の間に挟まれるスペースです。caSpace which is inserted between cells of an itemEspai inserit entre les cel·les de cada elementcaSeparatorSeparadorpt_BR --build-list Parse (name, file) pairs + --build-list 'Parse' pares (nome, arquivo) +caSpace which is inserted between grid columnL'espai inserit entre les columnes d'una graellacaThe width used for each itemL'amplada utilitzada per cada elementen_GBText columnText columnpt_BRModel column used to retrieve the text fromColuna de modelo usada para retirar o texto delapt_BRSelection modeModo de seleçãopt_BR%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s vem com ABSOLUTAMENTE NENHUMA GARANTIA, +Você pode redistribuir cópias de %s sob os termos +da licença "GNU Lesser General Public License" que pode ser +achada no pacote de origem %s. + +esRow SpacingEspacio de filafi --extern Generate extern symbols + --extern Generoi extern-symbolit +frSpace which is inserted between cells of an itemEspace qui est inséré entre les cellules d'un élémentjaThe width used for each itemそれぞれのアイテムに使用する幅です。esThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allEl lugar preferido para elipsar la cadena, si la etiqueta no tienelugar suficiente para mostrar la cadena enterafrThe orientation of the iconbarL'orientation de la barre d'icônesjaText for _All Icons全アイコンに文字を添える(_A)esSpace which is inserted at the edges of the icon viewEspacio que se inserta a los bordes de la vista de iconojaOpacity of the selection box選択ボックスの透明度です。es -h, --help Print this help message and exit + -h, --help Mostrar este mensaje de ayuda y salir +en_GBSelection modeSelection modecaHomogeneousHomogenipt_BRSpace which is inserted between grid rowsEspaço que é inserido entre linhas de gridjaSpace which is inserted between grid rowsグリッド行の間に挟まれるスペースです。en_GBSelection Box ColorSelection Box ColourfiModel column used to retrieve the icon pixbuf fromMallin sarake, josta kuvakkeen pixbuf noudetaanfiCustomize Toolbar...Mukauta välinepalkkia...fiWindow group leaderIkkunaryhmän johtajafrActive item text colorActiver la couleur du texte de l'élémentja_Remove Toolbarツールバーを削除(_R)ja_Desktop Defaultデスクトップの標準(_D)frHomogeneousHomogènept_BRUsage: %s [options] [file] +Uso: %s [opções] [arquivo] +deUsage: %s [options] [file] +Aufruf: %s [Optionen] [Dateien] +caView is reorderableVista és reordenablejaThe orientation of the iconbarアイコンバーが延びる方向です。elSession restart commandΕντολή επανεκκίνησης συνεδρίαςfrModel column used to retrieve the icon pixbuf fromModèle de colonne utilisé pour obtenir l'icône pixbufelActive item fill colorΧρώμα γεμίσματος ενεργού αντικειμένουen_GBColor of the selection boxColour of the selection boxesText columnColumna de textoel_Remove Toolbar_Απομάκρυνση Εργαλειοθήκηςfr --name=identifier C macro/variable name + --name=identif. Nom de la variable/macro C +deText for _All IconsText für _alle Icons anzeigenfrThe width used for each itemLa largeur utilisée pour chaque élémentfrCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Tous droits réservés. + +Écrit par Benedikt Meurer . + +frSelection Box ColorSélection de la couleur de la boitefr_Add a new toolbar_Ajouter une nouvelle barre d'outilsfrSpace which is inserted at the edges of the icon viewEspace qui est inséré sur les bords d'une vue d'icônesfrRow spacingEspace de ligneel_Text only_Κείμενο μόνοcaHow the text and icon of each item are positioned relative to each otherPosicionament relatiu entre el text i la icona de cada elementfiToolbar _StyleVälinepalkin t_yylipt_BRSession restart commandComando de reinício de sessãoelActive item border colorΧρώμα περιγράμματος ενεργού αντικειμένουcaModel column used to retrieve the text fromColumna del model d'on obtenir el textcaReorderableReordenableja_Add a new toolbar新しいツールバーを追加(_A)en_GBActive item text colorActive item text colourca -h, --help Print this help message and exit + -h, --help Mostra aquest missatge i surt +pt_BRThe orientation of the iconbarA orientação da barra de íconeses -v, --version Print version information and exit + -v, --version Mostrar informacion sobre la version y salir +fiCursor item text colorOsoitinkohteen tekstin väript_BRMarkup columnColuna de MarkupfrThe model for the icon viewLe modèle pour la vue d'icôneselOrientationΠροσανατολισμόςesIcon View ModelModelo de vista de iconoca_Icons onlyNomés _iconesesThe width used for each itemEl ancho usado por cada itemen_GB_Add a new toolbar_Add a new toolbarcaOpacity of the selection boxOpacitat de la caixa de selecciócaText for _All IconsText per t_otes les iconesfi_Remove Toolbar_Poista välinepalkkiesThe orientation of the iconbarLa orientacion de la barra de iconosesIcon Bar ModelModelo de barra de iconosfrThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allL'endroit préféré pour placer la chaîne en ellipse, si le label n'a pas assez d'espace pour afficher la chaîne entière, le cas échéanten_GBThe model for the icon viewThe model for the icon viewfr_Text only_Texte uniquementja --extern Generate extern symbols + --extern extern シンボルを生成します +ja -h, --help Print this help message and exit + -h, --help このヘルプメッセージを表示して終了します +elSeparatorΔιαχωριστικόfrOrientationOrientationjaModel column used to retrieve the text if using Pango markupPango のマークアップが使用されている場合に文字を取得するためのモデル欄です。jaActive item index有効アイテムのインデックスelActive item text colorΧρώμα κειμένου ενεργού αντικειμένουelRow spacingΔιάστιχο γραμμώνfrWhether the children should be all the same sizeSi tous les fils ont ou n'ont pas la même taillefrIcon View ModelModèle de vue d'icônesja --build-list Parse (name, file) pairs + --build-list 解析する (名前, ファイルの) ペアです +pt_BRNumber of columnsNúmero de colunasfrSelection Box AlphaSélection de l'alpha de la boitejaRestart command再起動コマンドesSpace which is inserted between grid columnEspacio que se inserta entre columnasel_Add a new toolbar_Προσθήκη μιας Νέας Εργαλειοθήκηςca --build-list Parse (name, file) pairs + --build-list Analitza parelles (nom, fitxer) +frReorderableRéordonnablecaEllipsizePunts suspensiusen_GBSelection Box AlphaSelection Box AlphacaSpace which is inserted at the edges of the icon viewEspai inserit a les vores de la vista d'iconespt_BRWindow group leaderLíder de grupo de janelafiModel column used to retrieve the text if using Pango markupMallin sarake, josta teksti noudetaan käytettäessä Pango-merkkaustael --extern Generate extern symbols + --extern Δημιουργία εξωτερικών συμβόλων +pt_BRCursor item border colorCor de borda de ítem de cursorjaActive item text color有効アイテムの文字色en_GBToolbar _StyleToolbar _Stylefr_Desktop DefaultBureau par _défautfiOrientationSuuntaesDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Arrastrar un item sobre la barra de herramientas para agregarlo y desde la barra de herramientas para borrarlo.ca%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s ve sense CAP TIPUS DE GARANTIA, +Podeu redistribuir còpies de %s baix els termes de +la GNU Lesser General Public License, la qual podeu trobar al +paquet de codi font de %s. + +elMarkup columnΣτήλη επισήμανσηςcaToolbar _StyleE_stil de la barra d'einesen_GBCursor item text colorCursor item text colourjaRow Spacing行スペースja --name=identifier C macro/variable name + --name=identifier C マクロ/変数名 +ca_Add a new toolbar_Afegeix una nova barra d'einescaActive item indexActiva element d'índexelMarginΠεριθώριοfiOpacity of the selection boxValintalaatikon läpinäkyvyysel -h, --help Print this help message and exit + -h, --help Εμφανίζει αυτό το κείμενο βοήθειας +el %s [options] --build-list [[name file]...] + %s [επιλογές] --build-list [[όνομα αρχείο]...] +frMarkup columnColonne baliseesSession restart commandComando Reiniciar sesionjaCursor item text colorカーソル・アイテムの文字色fiActive item indexAktiivisen kuvakkeen indeksies --extern Generate extern symbols + --extern Generar simbolos externos +esThe selection modeModo de seleccionelWhether this tag affects the ellipsize modeΑν αυτή η ετικέτα επηρεάζει τη χρήση αποσιωπητικώνdeSeparatorTrennerelHomogeneousΟμογενέςfiActive item border colorAktiivisen kohteen reunuksen värielNumber of columnsΑριθμός στηλώνesActive item border colorColor de borde del item activopt_BRIcon View ModelModelo de Visualização de ÍconefrSpace which is inserted between grid columnEspace qui est inséré entre les colonnes de la grillefiActiveAktiivinenfrRow SpacingEspace de ligneca_Remove Toolbar_Suprimir barra d'einesfi -h, --help Print this help message and exit + -h, --help Näytä tämä ohjeteksti ja poistu +jaThe amount of space between two consecutive columns二つの連続する表示欄の間隔です。frEllipsizeMettre en ellipseesSpacingEspaciadojaMargin余白caIcon View ModelModel de vista d'iconesjaThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allラベルが全ての文字列を表示するのに十分なスペースが無い場合や、まったく無い場合に文字列を省略する優先箇所です。de -h, --help Print this help message and exit + -h, --help Diesen Hilfetext anzeigen und beenden +elColumn SpacingΔιάστημα στηλώνpt_BR --name=identifier C macro/variable name + --name=Nome identificador de variável/macro de C +elSpace which is inserted at the edges of the icon viewΤο διάστημα που εισάγεται στα όρια της προβολής εικονιδίουcaCustomize Toolbar...Personalitza barra d'eines...jaModel for the icon barアイコンバーのためのモデルです。fiHow the text and icon of each item are positioned relative to each otherKuinka kohteiden teksti ja kuvake sijoitetaan suhteessa toisiinsaesCursor item text colorColor de texto del item cursorpt_BROrientationOrientaçãoesOrientationOrientacioncaDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Arrossega un element a les barres d'eines superiors per a afegir-lo. Arrossegueu-lo des de les barres d'eines a la taula d'elements per a suprimir-lo.ja --static Generate static symbols + --static static シンボルを生成します +esActiveActivoelRestart commandΕντολή επανεκκίνησηςcaIcon Bar ModelModel del plafó d'iconapt_BRCursor item fill colorCor de preenchimento de ítem de cursorpt_BRSeparatorSeparadorfrWidth for each itemLargeur de chaque élémentjaEllipsize中略ja -v, --version Print version information and exit + -v, --version バージョン情報を表示して終了します +deThe orientation of the iconbarDie Orientierung der Symbolleisteen_GBMarkup columnMarkup columnjaMarkup columnマークアップ欄jaWindow group leaderウィンドウグループのリーダーです。esRestart commandComando ReiniciaresCursor item border colorColor de borde del item cursorelWhether the children should be all the same sizeΕάν όλα τα θυγατρικά αντικείμενα πρέπει να έχουν το ίδιο μέγεθοςde --name=identifier C macro/variable name + --name=identifier C Variablenname +caPixbuf columnColumna de memòria de píxelfiIcon Bar ModelKuvakepalkkimallifr%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s est distribué SANS AUCUNE GARANTIE, +vous pouvez redistribuer des copies de %s sous les termes de +la Licence Publique Générale Amoindrie GNU qui peut être +trouvée dans l'archive de sources %s. + +elText for I_mportant IconsΚεί_μενο για τα Σημαντικά ΕικονίδιαfiThe orientation of the iconbarKuvakepalkin suuntaen_GBModel column used to retrieve the text if using Pango markupModel column used to retrieve the text if using Pango markupcaActive item border colorActiva element amb vora de colorelCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. All rights reserved. + +Γραμμένο από τον Benedikt Meurer . + +jaPlease report bugs to <%s>. +バグは <%s> に報告して下さい。 +frActiveActiverjaColor of the selection box選択ボックスの色です。caWhether this tag affects the ellipsize modeSi aquesta etiqueta afecta al mode de punts suspensiusjaIcon Bar ModelアイコンバーのモデルdeToolbar _StyleWerkzeugleisten_stilfr %s [options] --build-list [[name file]...] + %s [options] --build-list [[nom de fichier]...] +frModel column used to retrieve the text if using Pango markupModèle de colonne utilisé pour obtenir le texte si des balises Pango sont utiliséescaWindow group leaderFinestra principal del grupelColor of the selection boxΧρώμα του κουτιού επιλογήςes %s [options] --build-list [[name file]...] + %s [opciones] --build-list [[nombre archivo]]...] +caSpacingEspaiatjaSelection Box Color選択ボックスの色fiEllipsize setLyhentämissarjajaReorderable並べ替え可能fiText for I_mportant IconsTeksti vain t_ärkeille kuvakkeillefrToolbar _Style_Style de la barre d'outilsja%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +%s comes with ABSOLUTELY NO WARRANTY, +You may redistribute copies of %s under the terms of +the GNU Lesser General Public License which can be found in the +%s source package. + +en_GBThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allThe preferred place to ellipsize the string, if the label does not have enough room to display the entire string, if at allelPlease report bugs to <%s>. +Παρακαλούμε αναφέρατε σφάλματα στον <%s>/ +esActive item text colorColor de texto del item activocaCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Tots els drets reservats. + +Escrit per Benedikt Meurer + +deOrientationOrientierungcaColor of the selection boxColor de la caixa de selecciópt_BRSelection Box AlphaAlpha de Caixa de Seleçãopt_BRWindow groupGrupo de janeladeCustomize Toolbar...Werkzeugleiste anpassen...fi --static Generate static symbols + --static Generoi staattiset symbolit +caSpace which is inserted between grid rowsL'espai inserit entre les files d'una graellacaWidth for each itemAmplada de cada elementesModel column used to retrieve the text if using Pango markupModelo de columna usado para recuperar el texto, si usa PangoelActive item indexΤο αντικείμενο που είναι αυτή τη στιγμή ενεργόca %s [options] --build-list [[name file]...] + %s [opcions] --build-list [[nom del fitxer]...] +ca --extern Generate extern symbols + --extern Genera símbols externs +fiIcon View ModelKuvakenäkymämalliesToolbar _StyleE_stilo de barra de herramientaselReorderableΔυνατότητα αναταξινόμησηςfiThe preferred place to ellipsize the string, if the cell renderer does not have enough room to display the entire string, if at allKohta, josta merkkijono pyritään tarvittaessa lyhentämään, jos lohkopiirtimellä ei ole tarpeeksi tilaa merkkijonon näyttämiseen.esColumn SpacingEspaciamiento de columnapt_BRActiveAtivode_Desktop Default_Desktop Vorgabept_BRSpacingEspaçamentopt_BRModel column used to retrieve the text if using Pango markupColuna de modelo usada para retirar o texto se estiver usando markup de pangoen_GBCustomize Toolbar...Customise Toolbar...pt_BRColor of the selection boxCor de uma caixa de seleçãode_Text onlyNur _Text anzeigenelSelection Box ColorΧρώμα κουτιού επιλογήςfrThe selection modeLe mode de sélectioncaUsage: %s [options] [file] +Ús: %s [opcions] [fitxer] +pt_BRIcon Bar ModelModelo de Barra de Íconept_BRCopyright (c) 2005 + os-cillation e.K. All rights reserved. + +Written by Benedikt Meurer . + +Copyright (c) 2005 + os-cillation e.K. Todos os direitos reservados. + +Escrito por Benedikt Meurer . + +pt_BRThe width used for each itemA largura usada para cada ítemelWindow groupΟμάδα παραθύρωνpt_BR_Desktop DefaultPadrão de _Área de TrabalhofrModel column used to retrieve the text fromModèle de colonne utilisé pour obtenir le texteesEllipsizeElipsarfrSpace which is inserted between grid rowsEspace qui est inséré entre les lignes de la grillefrWindow group leaderChef du groupe de fenêtreselModel for the icon barΤο μοντέλο για τη μπάρα εικονιδίωνfrDrag an item onto the toolbars above to add it, from the toolbars in the items table to remove it.Glisser un article sur la barre d'outils ci-dessus pour l'ajouter, depuis la barre d'outils vers la table des articles pour le supprimer.frSeparatorSéparateur \ No newline at end of file diff -Naur ../libexo-without-helpers/po/ChangeLog ./po/ChangeLog --- ../libexo-without-helpers/po/ChangeLog Sun Jan 29 07:52:27 2006 +++ ./po/ChangeLog Mon Jan 30 19:23:55 2006 @@ -1,13 +1,3 @@ -2006-01-29 Daichi Kawahata - - * ca.po, de.po, el.po, en_GB.po, es.po, fi.po, fr.po, ja.po, - pt_BR.po: Bumped version up. - -2006-01-22 Benedikt Meurer - - * ca.po, de.po, el.po, en_GB.po, es.po, fi.po, fr.po, ja.po, - libexo-0.3.pot, pt_BR.po: Update translations. - 2006-01-08 Pau Rullan Ferragut * ca.po: little heading fixing diff -Naur ../libexo-without-helpers/po/Makefile ./po/Makefile --- ../libexo-without-helpers/po/Makefile Thu Jan 1 01:00:00 1970 +++ ./po/Makefile Mon Jan 30 19:23:55 2006 @@ -0,0 +1,307 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. +# +# - Modified by Owen Taylor to use GETTEXT_PACKAGE +# instead of PACKAGE and to look for po2tbl in ./ not in intl/ +# +# - Modified by jacob berkman to install +# Makefile.in.in and po2tbl.sed.in for use with glib-gettextize + +GETTEXT_PACKAGE = libexo-0.3 +PACKAGE = exo +VERSION = 0.3.1.3svn-r19548 + +SHELL = /bin/sh + + +srcdir = . +top_srcdir = .. +top_builddir = .. + + +prefix = /opt/local +exec_prefix = ${prefix} +datadir = ${prefix}/share +libdir = ${exec_prefix}/lib +localedir = $(libdir)/locale +gnulocaledir = $(datadir)/locale +gettextsrcdir = $(datadir)/glib-2.0/gettext/po +subdir = po +install_sh = /usr/home/bmeurer/Projects/libexo/trunk/install-sh +mkdir_p = $(mkinstalldirs) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs + +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 + +CC = gcc +GENCAT = @GENCAT@ +GMSGFMT = /opt/local/bin/msgfmt +MSGFMT = /opt/local/bin/msgfmt +XGETTEXT_ARGS = --keyword=Q_ +XGETTEXT = /opt/local/bin/xgettext $(XGETTEXT_ARGS) +INTLTOOL_UPDATE = $(top_builddir)/intltool-update +INTLTOOL_EXTRACT = $(top_builddir)/intltool-extract +MSGMERGE = XGETTEXT_ARGS="$(XGETTEXT_ARGS)" INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist +GENPOT = XGETTEXT_ARGS="$(XGETTEXT_ARGS)" INTLTOOL_EXTRACT=$(INTLTOOL_EXTRACT) srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot + +DEFS = -DHAVE_CONFIG_H +CFLAGS = -O2 -pipe -O0 -g3 -Werror -Wall +CPPFLAGS = -I/opt/local/include -I/usr/local/include -DHAVE_GNUC_VISIBILITY + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = +POFILES = ca.po de.po el.po en_GB.po es.po fi.po fr.po ja.po pt_BR.po +GMOFILES = ca.gmo de.gmo el.gmo en_GB.gmo es.gmo fi.gmo fr.gmo ja.gmo pt_BR.gmo +DISTFILES = ChangeLog Makefile.in.in POTFILES.in \ +$(POFILES) $(GMOFILES) $(SOURCES) + +POTFILES = \ + ../exo/exo-binding.c \ + ../exo/exo-cell-renderer-ellipsized-text.c \ + ../exo/exo-config.c \ + ../exo/exo-ellipsized-label.c \ + ../exo/exo-execute.c \ + ../exo/exo-gdk-pixbuf-extensions.c \ + ../exo/exo-gobject-extensions.c \ + ../exo/exo-gtk-extensions.c \ + ../exo/exo-icon-bar.c \ + ../exo/exo-icon-view.c \ + ../exo/exo-md5.c \ + ../exo/exo-pango-extensions.c \ + ../exo/exo-private.c \ + ../exo/exo-string.c \ + ../exo/exo-toolbars-editor-dialog.c \ + ../exo/exo-toolbars-editor.c \ + ../exo/exo-toolbars-model.c \ + ../exo/exo-toolbars-private.c \ + ../exo/exo-toolbars-view.c \ + ../exo/exo-url.c \ + ../exo/exo-utils.c \ + ../exo/exo-wrap-table.c \ + ../exo/exo-xsession-client.c \ + ../exo-csource/main.c \ + ../exo-helper/exo-helper-chooser-dialog.c \ + ../exo-helper/exo-helper-chooser.c \ + ../exo-helper/exo-helper-enum-types.c \ + ../exo-helper/exo-helper-launcher-dialog.c \ + ../exo-helper/exo-helper-utils.c \ + ../exo-helper/exo-helper.c \ + ../exo-helper/exo-preferred-applications-settings.c \ + ../exo-helper/helpers/Terminal.desktop.in \ + ../exo-helper/helpers/balsa.desktop.in \ + ../exo-helper/helpers/debian-sensible-browser.desktop.in \ + ../exo-helper/helpers/debian-x-terminal-emulator.desktop.in \ + ../exo-helper/helpers/epiphany.desktop.in \ + ../exo-helper/helpers/eterm.desktop.in \ + ../exo-helper/helpers/evolution.desktop.in \ + ../exo-helper/helpers/firefox.desktop.in \ + ../exo-helper/helpers/galeon.desktop.in \ + ../exo-helper/helpers/gnome-terminal.desktop.in \ + ../exo-helper/helpers/kmail.desktop.in \ + ../exo-helper/helpers/konqueror.desktop.in \ + ../exo-helper/helpers/mozilla-browser.desktop.in \ + ../exo-helper/helpers/mozilla-mailer.desktop.in \ + ../exo-helper/helpers/opera-browser.desktop.in \ + ../exo-helper/helpers/opera-mailer.desktop.in \ + ../exo-helper/helpers/thunderbird.desktop.in \ + ../exo-helper/helpers/xterm.desktop.in \ + ../exo-open/main.c + +CATALOGS = ca.gmo de.gmo el.gmo en_GB.gmo es.gmo fi.gmo fr.gmo ja.gmo pt_BR.gmo +CATOBJEXT = .gmo +INSTOBJEXT = .mo + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(GETTEXT_PACKAGE).pot + $(MSGMERGE) $< $(top_builddir)/po/$(GETTEXT_PACKAGE).pot -o $*pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-yes + +all-yes: $(CATALOGS) +all-no: + +$(GETTEXT_PACKAGE).pot: $(POTFILES) + $(GENPOT) + +install: install-exec install-data +install-exec: +install-data: install-data-yes +install-data-no: all +install-data-yes: all + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$(DESTDIR)$$destdir/$$lang/LC_MESSAGES; \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "glib"; then \ + if test -n "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(DESTDIR)$(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(DESTDIR)$(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT); \ + rm -f $(DESTDIR)$(gnulocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE)$(INSTOBJEXT).m; \ + done + if test "$(PACKAGE)" = "glib"; then \ + rm -f $(DESTDIR)$(gettextsrcdir)/Makefile.in.in; \ + fi + +check: all + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp + rm -fr *.o + rm -f .intltool-merge-cache + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f $(GMOFILES) + +distdir = ../$(GETTEXT_PACKAGE)-$(VERSION)/$(subdir) +dist distdir: $(DISTFILES) $(GETTEXT_PACKAGE).pot + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(GETTEXT_PACKAGE).pot + tmpdir=`pwd`; \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + echo "$$lang:"; \ + result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ + if $$result; then \ + if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi; \ + done + +# POTFILES is created from POTFILES.in by stripping comments, empty lines +# and Intltool tags (enclosed in square brackets), and appending a full +# relative path to them +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' \ + -e "s/^\[.*\] +//" \ + -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff -Naur ../libexo-without-helpers/po/POTFILES.in ./po/POTFILES.in --- ../libexo-without-helpers/po/POTFILES.in Tue Nov 22 17:40:55 2005 +++ ./po/POTFILES.in Mon Jan 30 19:23:55 2006 @@ -1,8 +1,8 @@ -exo-csource/main.c exo/exo-binding.c exo/exo-cell-renderer-ellipsized-text.c exo/exo-config.c exo/exo-ellipsized-label.c +exo/exo-execute.c exo/exo-gdk-pixbuf-extensions.c exo/exo-gobject-extensions.c exo/exo-gtk-extensions.c @@ -17,6 +17,37 @@ exo/exo-toolbars-model.c exo/exo-toolbars-private.c exo/exo-toolbars-view.c +exo/exo-url.c exo/exo-utils.c exo/exo-wrap-table.c exo/exo-xsession-client.c + +exo-csource/main.c + +exo-helper/exo-helper-chooser-dialog.c +exo-helper/exo-helper-chooser.c +exo-helper/exo-helper-enum-types.c +exo-helper/exo-helper-launcher-dialog.c +exo-helper/exo-helper-utils.c +exo-helper/exo-helper.c +exo-helper/exo-preferred-applications-settings.c +exo-helper/helpers/Terminal.desktop.in +exo-helper/helpers/balsa.desktop.in +exo-helper/helpers/debian-sensible-browser.desktop.in +exo-helper/helpers/debian-x-terminal-emulator.desktop.in +exo-helper/helpers/epiphany.desktop.in +exo-helper/helpers/eterm.desktop.in +exo-helper/helpers/evolution.desktop.in +exo-helper/helpers/firefox.desktop.in +exo-helper/helpers/galeon.desktop.in +exo-helper/helpers/gnome-terminal.desktop.in +exo-helper/helpers/kmail.desktop.in +exo-helper/helpers/konqueror.desktop.in +exo-helper/helpers/mozilla-browser.desktop.in +exo-helper/helpers/mozilla-mailer.desktop.in +exo-helper/helpers/opera-browser.desktop.in +exo-helper/helpers/opera-mailer.desktop.in +exo-helper/helpers/thunderbird.desktop.in +exo-helper/helpers/xterm.desktop.in + +exo-open/main.c diff -Naur ../libexo-without-helpers/po/ca.po ./po/ca.po --- ../libexo-without-helpers/po/ca.po Sun Jan 29 07:52:27 2006 +++ ./po/ca.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2006-01-08 21:54+0100\n" diff -Naur ../libexo-without-helpers/po/de.po ./po/de.po --- ../libexo-without-helpers/po/de.po Sun Jan 29 07:52:27 2006 +++ ./po/de.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-10-10 01:45+0900\n" diff -Naur ../libexo-without-helpers/po/el.po ./po/el.po --- ../libexo-without-helpers/po/el.po Sun Jan 29 07:52:27 2006 +++ ./po/el.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-11-27 04:22+0200\n" diff -Naur ../libexo-without-helpers/po/en_GB.po ./po/en_GB.po --- ../libexo-without-helpers/po/en_GB.po Sun Jan 29 07:52:27 2006 +++ ./po/en_GB.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-10-10 01:45+0900\n" diff -Naur ../libexo-without-helpers/po/es.po ./po/es.po --- ../libexo-without-helpers/po/es.po Sun Jan 29 07:52:27 2006 +++ ./po/es.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-10-10 01:45+0900\n" diff -Naur ../libexo-without-helpers/po/fi.po ./po/fi.po --- ../libexo-without-helpers/po/fi.po Sun Jan 29 07:52:27 2006 +++ ./po/fi.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-10-10 01:46+0900\n" diff -Naur ../libexo-without-helpers/po/fr.po ./po/fr.po --- ../libexo-without-helpers/po/fr.po Sun Jan 29 07:52:27 2006 +++ ./po/fr.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-12-09 10:43+0100\n" diff -Naur ../libexo-without-helpers/po/ja.po ./po/ja.po --- ../libexo-without-helpers/po/ja.po Sun Jan 29 07:52:27 2006 +++ ./po/ja.po Mon Jan 30 19:23:55 2006 @@ -1,4 +1,4 @@ -# $Id: ja.po 19645 2006-01-29 06:52:27Z daichi $ +# $Id: ja.po 19546 2006-01-22 11:24:25Z benny $ # # Japanese translations for exo package. # Copyright (C) 2004-2005 os-cillation e.K. @@ -7,7 +7,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-11-28 21:58+0900\n" diff -Naur ../libexo-without-helpers/po/pt_BR.po ./po/pt_BR.po --- ../libexo-without-helpers/po/pt_BR.po Sun Jan 29 07:52:27 2006 +++ ./po/pt_BR.po Mon Jan 30 19:23:55 2006 @@ -5,7 +5,7 @@ # msgid "" msgstr "" -"Project-Id-Version: exo 0.3.1.3svn\n" +"Project-Id-Version: exo 0.3.1.1svn\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-01-22 11:50+0100\n" "PO-Revision-Date: 2005-11-17 16:52+0900\n"