[zenity/gtk4-port] notification: Initial port to GNotification



commit 73a1fd232d5c1a7aa2ccc0d429d141dd1250c296
Author: Logan Rathbone <poprocks gmail com>
Date:   Sun Jan 9 23:18:20 2022 -0500

    notification: Initial port to GNotification
    
    Port from libnotify, which is deprecated.
    
    Some features are yet missing, but this is a start.
    
    This drops libnotify as a dependency; meson files updated accordingly.

 data/meson.build                 |  26 ++++
 data/org.gnome.Zenity.desktop.in |  11 ++
 meson.build                      |  18 ++-
 meson_options.txt                |   3 -
 po/POTFILES                      |   1 +
 src/main.c                       |  17 ++-
 src/meson.build                  |   7 +-
 src/notification.c               | 249 +++++++++------------------------------
 src/option.c                     |  23 ----
 src/option.h                     |   4 -
 src/util.c                       |   6 +-
 src/util.h                       |   2 -
 src/zenity.h                     |   6 +-
 13 files changed, 110 insertions(+), 263 deletions(-)
---
diff --git a/data/meson.build b/data/meson.build
index c85889ef..04cfc15d 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -1 +1,27 @@
+# .desktop file
+
+desktop_file = i18n.merge_file(
+  input: '@0  desktop in'.format(app_id),
+  output: '@0@.desktop'.format(app_id),
+  po_dir: zenity_po_dir,
+  type: 'desktop',
+  install_dir: join_paths(zenity_datadir, 'applications'),
+  install: true
+)
+
+desktop_file_validate_prg = find_program(
+  'desktop-file-validate',
+  required: false
+)
+
+if desktop_file_validate_prg.found()
+  test(
+    'Validate desktop file',
+    desktop_file_validate_prg,
+    args: [desktop_file]
+  )
+endif
+
+# manpage
+
 install_man('zenity.1')
diff --git a/data/org.gnome.Zenity.desktop.in b/data/org.gnome.Zenity.desktop.in
new file mode 100644
index 00000000..1e3411e0
--- /dev/null
+++ b/data/org.gnome.Zenity.desktop.in
@@ -0,0 +1,11 @@
+[Desktop Entry]
+# Translators: Do NOT translate or transliterate this text (this is a variable that will be replaced with 
the app name)!
+Name=Zenity
+Comment=Display dialog boxes from the command line
+Exec=zenity
+Terminal=false
+Type=Application
+NoDisplay=true
+StartupNotify=true
+DBusActivatable=true
+X-GNOME-UsesNotifications=true
diff --git a/meson.build b/meson.build
index 26dad82e..c76a61ad 100644
--- a/meson.build
+++ b/meson.build
@@ -4,6 +4,9 @@ project('zenity', 'c',
   license: 'LGPL-2.1-or-later'
 )
 
+app_id = 'org.gnome.Zenity'
+resource_base_path = '/org/gnome/Zenity'
+
 version_arr = meson.project_version().split('.')
 zenity_version_major = version_arr[0].to_int()
 zenity_version_minor = version_arr[1]
@@ -33,6 +36,9 @@ zenity_conf.set_quoted('PACKAGE_DATADIR', zenity_datadir)
 zenity_conf.set_quoted('PACKAGE_LIBDIR', zenity_libdir)
 zenity_conf.set_quoted('PACKAGE_LOCALE_DIR', zenity_localedir)
 
+zenity_conf.set_quoted('APP_ID', app_id)
+zenity_conf.set_quoted('RESOURCE_BASE_PATH', resource_base_path)
+
 zenity_conf.set('VERSION', 'PACKAGE_VERSION')
 zenity_conf.set('GETTEXT_PACKAGE', 'PACKAGE_NAME')
 zenity_conf.set('LOCALEDIR', 'PACKAGE_LOCALE_DIR')
@@ -58,15 +64,6 @@ opt_missing_str = '''
 Requested optional @0@ support but library not found.
 Please ensure you have any required development libraries installed.'''
 
-libnotify = dependency('libnotify', version: '>= 0.6.1', required: false)
-if get_option('libnotify')
-  if libnotify.found()
-    zenity_conf.set('HAVE_LIBNOTIFY', true)
-  else
-    error(opt_missing_str.format('libnotify'))
-  endif
-endif
-
 # TODO
 #webkitgtk = dependency('webkit2gtk-4.0', version: '>= 2.8.1', required: false)
 #if get_option('webkitgtk')
@@ -96,8 +93,7 @@ summary({'prefix': zenity_prefix,
         'iconsdir': zenity_iconsdir,
         }, section: 'Directories')
 
-summary({'libnotify': get_option('libnotify'),
-         'gdialog script': perl.found(),
+summary({'gdialog script': perl.found(),
         }, section: 'Configuration')
 
 subdir('src')
diff --git a/meson_options.txt b/meson_options.txt
index d976e86a..deeaf4b5 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,6 +1,3 @@
-option('libnotify', type : 'boolean', value : true,
-  description : 'enable libnotify for desktop notification support')
-
 #TODO
 #option('webkitgtk', type : 'boolean', value : true,
 #  description : 'enable webkitgtk support')
diff --git a/po/POTFILES b/po/POTFILES
index 3488a950..dbcb0613 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -1,5 +1,6 @@
 # List of source files containing translatable strings.
 # Please keep this file sorted alphabetically.
+data/org.gnome.Zenity.desktop.in
 src/about.c
 src/calendar.c
 src/color.c
diff --git a/src/main.c b/src/main.c
index 86a816bc..a4531fd2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -43,7 +43,7 @@ command_line_cb (GtkApplication *app,
                GApplicationCommandLine *command_line,
                gpointer user_data)
 {
-       g_autofree ZenityArgs *args = user_data;
+       ZenityArgs *args = user_data;
        ZenityParsingOptions *results;
 
        results = zenity_option_parse (args->argc, args->argv);
@@ -83,11 +83,9 @@ command_line_cb (GtkApplication *app,
                        zenity_tree (results->data, results->tree_data);
                        break;
                        
-#ifdef HAVE_LIBNOTIFY
                case MODE_NOTIFICATION:
                        zenity_notification (results->data, results->notification_data);
                        break;
-#endif
 
                case MODE_PROGRESS:
                        zenity_progress (results->data, results->progress_data);
@@ -129,12 +127,14 @@ command_line_cb (GtkApplication *app,
 
        g_application_command_line_set_exit_status (command_line,
                        results->data->exit_code);
+
+       g_free (args);
 }
 
 int
 main (int argc, char *argv[])
 {
-       g_autofree ZenityArgs *args = NULL;
+       ZenityArgs *args;
        g_autoptr(GtkApplication) app = NULL;
        int status;
 
@@ -146,15 +146,12 @@ main (int argc, char *argv[])
        textdomain (GETTEXT_PACKAGE);
        /* </i18n> */
 
-       args = g_new (ZenityArgs, 1);
+       args = g_new0 (ZenityArgs, 1);
        args->argc = argc;
        args->argv = argv;
 
-       app = gtk_application_new ("org.gnome.Zenity",
-                       G_APPLICATION_HANDLES_COMMAND_LINE);
-
-       g_signal_connect (app, "command-line",
-                       G_CALLBACK(command_line_cb), args);
+       app = gtk_application_new (APP_ID, G_APPLICATION_HANDLES_COMMAND_LINE);
+       g_signal_connect (app, "command-line", G_CALLBACK(command_line_cb), args);
 
        status = g_application_run (G_APPLICATION(app), 0, NULL);
 
diff --git a/src/meson.build b/src/meson.build
index 1d3cd82c..7e5401f5 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -18,11 +18,6 @@ zenity_sources = [
   'util.c'
 ]
 
-zenity_deps = [
-  gtk_dep,
-  libnotify
-]
-
 zenity_res = gnome.compile_resources(
   'zenity-resources',
   'zenity.gresource.xml',
@@ -37,8 +32,8 @@ zenity = executable(
   meson.project_name(),
   zenity_sources + zenity_res,
   include_directories: zenity_root_dir,
-  dependencies: zenity_deps,
   c_args: zenity_c_args,
+  dependencies: gtk_dep,
   install: true
 )
 
diff --git a/src/notification.c b/src/notification.c
index 70b65bc5..78f26c27 100644
--- a/src/notification.c
+++ b/src/notification.c
@@ -5,7 +5,7 @@
  *
  * Copyright © 2002 Sun Microsystems, Inc.
  * Copyright © 2006 Christian Persch
- * Copyright © 2021 Logan Rathbone
+ * Copyright © 2021-2022 Logan Rathbone
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -32,164 +32,70 @@
 #include <string.h>
 #include <time.h>
 #include <unistd.h>
-#ifdef HAVE_LIBNOTIFY
-#include <libnotify/notify.h>
 
 #include "util.h"
 #include "zenity.h"
 
 #define MAX_HINTS 16
 
-static NotifyNotification *
-zenity_notification_new (char *message, char *icon_file)
+static void
+zenity_send_notification (GNotification *notification)
 {
-       NotifyNotification *notif;
+       g_application_send_notification (g_application_get_default (),
+                       "zenity-notification",
+                       notification);
+}
+
+static GNotification *
+zenity_notification_new (char *message, char *icon_path)
+{
+       g_autoptr (GNotification) notif;
        g_auto(GStrv) text = NULL;
+       g_autoptr(GFile) icon_file = NULL;
+       g_autoptr(GIcon) icon = NULL;
 
+       /* Accept a title and optional body in the form of `my title\nmy body'.
+        * The way this is displayed by the notification system is implementation
+        * defined.
+        */
        text = g_strsplit (g_strcompress (message), "\n", 2);
        if (*text == NULL)
        {
-               g_printerr (_ ("Could not parse message\n"));
+               g_printerr (_("Could not parse message\n"));
                return NULL;
        }
 
-       notif = notify_notification_new (text[0], /* title */
-               text[1], /* summary */
-               icon_file);
-
-       return notif;
-}
-
-static void
-on_notification_default_action (NotifyNotification *n,
-               const char *action, void *user_data)
-{
-       ZenityData *zen_data = user_data;
-
-       notify_notification_close (n, NULL);
-
-       zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
-
-       zenity_util_gapp_quit (NULL);
-}
-
-static GHashTable *
-zenity_notification_parse_hints_array (char **hints)
-{
-       g_autoptr(GHashTable) result = NULL;
-       g_auto(GStrv) pair = NULL;
-       int i;
+       notif = g_notification_new (text[0]);   /* title */
 
-       result = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
+       if (text[1])
+               g_notification_set_body (notif, text[1]);
 
-       for (i = 0; i < (int)g_strv_length (hints); i++)
+       if (icon_path)
        {
-               pair = g_strsplit (hints[i], ":", 2);
-               g_hash_table_replace (result, g_strdup (pair[0]), g_strdup (pair[1]));
-       }
+               icon_file = g_file_new_for_path (icon_path);
 
-       if (g_hash_table_size (result) == 0) {
-               return NULL;
-       } else {
-               return result;
+               if (g_file_query_exists (icon_file, NULL))
+               {
+                       icon = g_file_icon_new (icon_file);
+                       g_notification_set_icon (notif, icon);
+               }
+               else
+                       g_printerr (_("Icon file not found: %s\n"), icon_path);
        }
-}
-
-static GHashTable *
-zenity_notification_parse_hints (char *hints)
-{
-       GHashTable *result;
-       g_auto(GStrv) hint_array = NULL;
-
-       hint_array = g_strsplit (g_strcompress (hints), "\n", MAX_HINTS);
-       result = zenity_notification_parse_hints_array (hint_array);
 
-       return result;
+       return g_steal_pointer (&notif);
 }
 
 static void
-zenity_notification_set_hint (gpointer key, gpointer value,
+on_notification_default_action (GSimpleAction *self,
+               GVariant *parameter,
                gpointer user_data)
 {
-       NotifyNotification *notification = user_data;
-       char *hint_name = key;
-       char *string_value = value;
-
-       GVariant *hint_value;
-       gboolean boolean_value;
-       gint32 int_value;
-       guchar byte_value;
-
-       if ((g_ascii_strcasecmp ("action-icons", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("resident", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("suppress-sound", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("transient", hint_name) == 0))
-       {
-               /* boolean hints */
-               if (g_ascii_strcasecmp ("true", string_value) == 0) {
-                       boolean_value = TRUE;
-               } else if (g_ascii_strcasecmp ("false", string_value) == 0) {
-                       boolean_value = FALSE;
-               } else {
-                       g_printerr (_ ("Invalid value for a boolean typed hint.\nSupported "
-                                                  "values are 'true' or 'false'.\n"));
-                       return;
-               }
-               hint_value = g_variant_new_boolean (boolean_value);
-       }
-       else if ((g_ascii_strcasecmp ("category", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("desktop-entry", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("image-path", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("image_path", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("sound-file", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("sound-name", hint_name) == 0))
-       {
-               /* string hints */
-               hint_value = g_variant_new_string (string_value);
-       }
-       else if ((g_ascii_strcasecmp ("image-data", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("image_data", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("icon-data", hint_name) == 0))
-       {
-               /* (iibiiay) */
-               g_printerr (_ ("Unsupported hint. Skipping.\n"));
-               return;
-       }
-       else if ((g_ascii_strcasecmp ("x", hint_name) == 0) ||
-               (g_ascii_strcasecmp ("y", hint_name) == 0))
-       {
-               /* int hints */
-               if (string_value == NULL)
-                       string_value = "";
-               int_value = (gint32) g_ascii_strtoll (string_value, NULL, 0);
-               hint_value = g_variant_new_int32 (int_value);
-       }
-       else if ((g_ascii_strcasecmp ("urgency", hint_name) == 0))
-       {
-               /* byte hints */
-               if (string_value == NULL)
-                       string_value = "";
-               byte_value = (guchar) g_ascii_strtoll (string_value, NULL, 0);
-               hint_value = g_variant_new_byte (byte_value);
-       }
-       else
-       {
-               /* unknown hints */
-               g_printerr (_("Unknown hint name. Skipping.\n"));
-               return;
-       }
-
-       notify_notification_set_hint (notification, hint_name, hint_value);
-}
+       ZenityData *zen_data = user_data;
 
-static void
-zenity_notification_set_hints (NotifyNotification *notification,
-               GHashTable *hints)
-{
-       if (hints == NULL)
-               return;
+       zen_data->exit_code = zenity_util_return_exit_code (ZENITY_OK);
 
-       g_hash_table_foreach (hints, zenity_notification_set_hint, notification);
+       zenity_util_gapp_quit (NULL);
 }
 
 static gboolean
@@ -197,7 +103,6 @@ zenity_notification_handle_stdin (GIOChannel *channel, GIOCondition condition,
                gpointer user_data)
 {
        g_autofree char *icon_file = NULL;
-       g_autoptr(GHashTable) notification_hints = NULL;
 
        if ((condition & G_IO_IN) != 0)
        {
@@ -254,10 +159,6 @@ zenity_notification_handle_stdin (GIOChannel *channel, GIOCondition condition,
                        {
                                icon_file = g_strdup (value);
                        }
-                       else if (!g_ascii_strcasecmp (command, "hints"))
-                       {
-                               notification_hints = zenity_notification_parse_hints (value);
-                       }
                        else if (!g_ascii_strcasecmp (command, "message"))
                        {
                                /* display a notification bubble */
@@ -267,23 +168,13 @@ zenity_notification_handle_stdin (GIOChannel *channel, GIOCondition condition,
                                }
                                else
                                {
-                                       NotifyNotification *notif;
-                                       error = NULL;
+                                       g_autoptr(GNotification) notif = NULL;
 
                                        notif = zenity_notification_new (value, icon_file);
                                        if (notif == NULL)
                                                continue;
 
-                                       zenity_notification_set_hints (notif, notification_hints);
-
-                                       notify_notification_show (notif, &error);
-                                       if (error) {
-                                               g_warning (
-                                                       "Error showing notification: %s", error->message);
-                                               error = NULL;
-                                       }
-
-                                       g_object_unref (notif);
+                                       zenity_send_notification (notif);
                                }
                        }
                        else if (! g_ascii_strcasecmp (command, "tooltip"))
@@ -294,22 +185,14 @@ zenity_notification_handle_stdin (GIOChannel *channel, GIOCondition condition,
                                }
                                else
                                {
-                                       NotifyNotification *notif =
-                                               zenity_notification_new (value, icon_file);
+                                       g_autoptr(GNotification) notif = NULL;
+
+                                       notif = zenity_notification_new (value, icon_file);
 
                                        if (notif == NULL)
                                                continue;
 
-                                       zenity_notification_set_hints (notif, notification_hints);
-
-                                       notify_notification_show (notif, &error);
-                                       if (error)
-                                       {
-                                               g_warning ("Error showing notification: %s",
-                                                               error->message);
-
-                                               error = NULL;
-                                       }
+                                       zenity_send_notification (notif);
                                }
                        }
                        else if (!g_ascii_strcasecmp (command, "visible"))
@@ -351,14 +234,7 @@ void
 zenity_notification (ZenityData *data,
                ZenityNotificationData *notification_data)
 {
-       g_autoptr(GError) error = NULL;
-       NotifyNotification *notification;
-       g_autoptr(GHashTable) notification_hints = NULL;
-
-       /* create the notification widget */
-       if (!notify_is_initted ()) {
-               notify_init (_ ("Zenity notification"));
-       }
+       GNotification *notification;
 
        if (notification_data->listen)
        {
@@ -368,42 +244,25 @@ zenity_notification (ZenityData *data,
        }
        else
        {
+               g_autoptr(GSimpleAction) action = NULL;
+
                if (notification_data->notification_text == NULL)
                        exit (1);
 
-               notification =
-                       zenity_notification_new (notification_data->notification_text,
-                                       notification_data->icon);
+               notification = zenity_notification_new (
+                               notification_data->notification_text, notification_data->icon);
 
                if (notification == NULL)
                        exit (1);
 
                /* if we aren't listening for changes, then close on default action */
-               notify_notification_add_action (notification,
-                       "default",
-                       "Do Default Action",
-                       (NotifyActionCallback) on_notification_default_action,
-                       data,
-                       NULL);
+               action = g_simple_action_new ("app.default", NULL);
+               g_signal_connect (action, "activate",
+                               G_CALLBACK(on_notification_default_action), data);
 
-               /* set the notification hints for the displayed notification */
-               if (notification_data->notification_hints != NULL)
-               {
-                       notification_hints = zenity_notification_parse_hints_array (
-                               notification_data->notification_hints);
-
-                       zenity_notification_set_hints (notification, notification_hints);
-               }
+               g_notification_set_default_action (notification, "app.default");
 
-               /* Show icon and wait */
-               error = NULL;
-               if (! notify_notification_show (notification, &error))
-               {
-                       if (error != NULL) {
-                               g_warning ("Error showing notification: %s", error->message);
-                       }
-                       exit (1);
-               }
+               zenity_send_notification (notification);
        }
 
        if (data->timeout_delay > 0) {
@@ -414,5 +273,3 @@ zenity_notification (ZenityData *data,
                zenity_util_gapp_main (NULL);
        }
 }
-
-#endif
diff --git a/src/option.c b/src/option.c
index f46d6914..0daa493a 100644
--- a/src/option.c
+++ b/src/option.c
@@ -87,13 +87,10 @@ static gboolean zenity_list_hide_header;
 static gboolean zenity_list_imagelist;
 static gboolean zenity_list_mid_search;
 
-#ifdef HAVE_LIBNOTIFY
 /* Notification Dialog Options */
 static gboolean zenity_notification_active;
 static gboolean zenity_notification_listen;
 static char *zenity_notification_icon;
-static char **zenity_notification_hints;
-#endif
 
 /* Progress Dialog Options */
 static gboolean zenity_progress_active;
@@ -539,7 +536,6 @@ static GOptionEntry list_options[] =
                        NULL},
                {NULL}};
 
-#ifdef HAVE_LIBNOTIFY
 static GOptionEntry notification_options[] =
                {{"notification",
                         '\0',
@@ -569,17 +565,8 @@ static GOptionEntry notification_options[] =
                        &zenity_notification_listen,
                        N_ ("Listen for commands on stdin"),
                        NULL},
-               {"hint",
-                       '\0',
-                       G_OPTION_FLAG_NOALIAS,
-                       G_OPTION_ARG_STRING_ARRAY,
-                       &zenity_notification_hints,
-                       N_ ("Set the notification hints"),
-                       N_ ("TEXT")},
                {NULL}};
 
-#endif
-
 static GOptionEntry progress_options[] =
                {{"progress",
                        '\0',
@@ -1060,9 +1047,7 @@ zenity_option_init (void)
        results->progress_data = g_new0 (ZenityProgressData, 1);
        results->text_data = g_new0 (ZenityTextData, 1);
        results->tree_data = g_new0 (ZenityTreeData, 1);
-#ifdef HAVE_LIBNOTIFY
        results->notification_data = g_new0 (ZenityNotificationData, 1);
-#endif
        results->color_data = g_new0 (ZenityColorData, 1);
        results->password_data = g_new0 (ZenityPasswordData, 1);
        results->forms_data = g_new0 (ZenityFormsData, 1);
@@ -1221,7 +1206,6 @@ zenity_list_pre_callback (GOptionContext *context, GOptionGroup *group,
        return TRUE;
 }
 
-#ifdef HAVE_LIBNOTIFY
 static gboolean
 zenity_notification_pre_callback (GOptionContext *context, GOptionGroup *group,
        gpointer data, GError **error)
@@ -1232,7 +1216,6 @@ zenity_notification_pre_callback (GOptionContext *context, GOptionGroup *group,
 
        return TRUE;
 }
-#endif
 
 static gboolean
 zenity_progress_pre_callback (GOptionContext *context, GOptionGroup *group,
@@ -1609,7 +1592,6 @@ zenity_list_post_callback (GOptionContext *context, GOptionGroup *group,
        return TRUE;
 }
 
-#ifdef HAVE_LIBNOTIFY
 static gboolean
 zenity_notification_post_callback (GOptionContext *context, GOptionGroup *group,
        gpointer data, GError **error)
@@ -1623,8 +1605,6 @@ zenity_notification_post_callback (GOptionContext *context, GOptionGroup *group,
                        zenity_general_dialog_text;
                results->notification_data->listen = zenity_notification_listen;
                results->notification_data->icon = zenity_notification_icon;
-               results->notification_data->notification_hints =
-                       zenity_notification_hints;
        }
        else
        {
@@ -1636,7 +1616,6 @@ zenity_notification_post_callback (GOptionContext *context, GOptionGroup *group,
        }
        return TRUE;
 }
-#endif
 
 static gboolean
 zenity_progress_post_callback (GOptionContext *context, GOptionGroup *group,
@@ -2025,7 +2004,6 @@ zenity_create_context (void)
        g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
        g_option_context_add_group (tmp_ctx, a_group);
 
-#ifdef HAVE_LIBNOTIFY
        /* Adds notification option entries */
        a_group = g_option_group_new ("notification",
                N_ ("Notification icon options"),
@@ -2039,7 +2017,6 @@ zenity_create_context (void)
        g_option_group_set_error_hook (a_group, zenity_option_error_callback);
        g_option_group_set_translation_domain (a_group, GETTEXT_PACKAGE);
        g_option_context_add_group (tmp_ctx, a_group);
-#endif
 
        /* Adds progress option entries */
        a_group = g_option_group_new ("progress",
diff --git a/src/option.h b/src/option.h
index 40cdcb0f..df4150a2 100644
--- a/src/option.h
+++ b/src/option.h
@@ -41,9 +41,7 @@ typedef enum {
        MODE_WARNING,
        MODE_SCALE,
        MODE_INFO,
-#ifdef HAVE_LIBNOTIFY
        MODE_NOTIFICATION,
-#endif
        MODE_COLOR,
        MODE_PASSWORD,
        MODE_FORMS,
@@ -71,9 +69,7 @@ typedef struct {
        ZenityProgressData *progress_data;
        ZenityTextData *text_data;
        ZenityTreeData *tree_data;
-#ifdef HAVE_LIBNOTIFY
        ZenityNotificationData *notification_data;
-#endif
        ZenityColorData *color_data;
        ZenityPasswordData *password_data;
        ZenityFormsData *forms_data;
diff --git a/src/util.c b/src/util.c
index d0dcc3f3..dfd54ee1 100644
--- a/src/util.c
+++ b/src/util.c
@@ -30,9 +30,6 @@
  *          Tom Tromey <tromey redhat com>
  */
 
-#include "config.h"
-
-#include "config.h"
 #include "util.h"
 #include "zenity.h"
 #include <errno.h>
@@ -42,11 +39,14 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "config.h"
+
 #define ZENITY_OK_DEFAULT 0
 #define ZENITY_CANCEL_DEFAULT 1
 #define ZENITY_ESC_DEFAULT 1
 #define ZENITY_ERROR_DEFAULT -1
 #define ZENITY_EXTRA_DEFAULT 127
+#define ZENITY_UI_RESOURCE_PATH RESOURCE_BASE_PATH "/zenity.ui"
 
 GtkBuilder *
 zenity_util_load_ui_file (const char *root_widget, ...)
diff --git a/src/util.h b/src/util.h
index 0442caf7..aaa73e39 100644
--- a/src/util.h
+++ b/src/util.h
@@ -41,8 +41,6 @@
 
 G_BEGIN_DECLS
 
-#define ZENITY_UI_RESOURCE_PATH "/org/gnome/Zenity/zenity.ui"
-
 #define ZENITY_IMAGE_FULLPATH(filename) (PACKAGE_DATADIR "/" filename)
 
 GtkBuilder *zenity_util_load_ui_file (const char *widget_root,
diff --git a/src/zenity.h b/src/zenity.h
index 8eb85535..bcfb83b3 100644
--- a/src/zenity.h
+++ b/src/zenity.h
@@ -125,14 +125,12 @@ typedef struct {
        const char **data;
 } ZenityTreeData;
 
-#ifdef HAVE_LIBNOTIFY
 typedef struct {
        char *notification_text;
        gboolean listen;
        char *icon;
-       char **notification_hints;
+//     char **notification_hints;
 } ZenityNotificationData;
-#endif
 
 typedef struct {
        char *color;
@@ -179,10 +177,8 @@ void zenity_entry (ZenityData *data, ZenityEntryData *entry_data);
 void zenity_progress (ZenityData *data, ZenityProgressData *progress_data);
 void zenity_text (ZenityData *data, ZenityTextData *text_data);
 void zenity_tree (ZenityData *data, ZenityTreeData *tree_data);
-#ifdef HAVE_LIBNOTIFY
 void zenity_notification (ZenityData *data,
                ZenityNotificationData *notification_data);
-#endif
 
 void zenity_colorselection (
        ZenityData *data, ZenityColorData *notification_data);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]