From 6b1bf5cb40e0848ebeb68819521ceef0ddff5826 Mon Sep 17 00:00:00 2001 From: guinux Date: Mon, 29 Aug 2016 16:29:58 +0200 Subject: [PATCH] move appindicator support to an optional binary pamac-tray-appindicator --- Makefile | 7 ++ .../pamac-tray-appindicator.desktop | 8 ++ data/applications/pamac-tray.desktop | 1 + src/Makefile | 14 ++- src/pamac-tray-appindicator | Bin 0 -> 92576 bytes src/tray-appindicator.vala | 63 ++++++++++ src/tray-gtk.vala | 62 ++++++++++ src/tray.vala | 111 ++++-------------- 8 files changed, 174 insertions(+), 92 deletions(-) create mode 100644 data/applications/pamac-tray-appindicator.desktop create mode 100755 src/pamac-tray-appindicator create mode 100644 src/tray-appindicator.vala create mode 100644 src/tray-gtk.vala diff --git a/Makefile b/Makefile index 252c20e..de474d1 100644 --- a/Makefile +++ b/Makefile @@ -7,9 +7,12 @@ datadir := $(prefix)/share localedir := $(datadir)/locale sysconfdir ?= /etc +use_appindicator ?= false + all: cd resources && make resources cd src && make binaries + [ $(use_appindicator) = true ] && cd src && make pamac-tray-appindicator || echo no appindicator support cd po && make gettext clean: @@ -27,11 +30,13 @@ install: install -Dm755 src/libpamac.so $(libdir)/libpamac.so install -Dm744 src/pamac-daemon $(bindir)/pamac-daemon install -Dm755 src/pamac-tray $(bindir)/pamac-tray + [ -e src/pamac-tray-appindicator ] && install -Dm755 src/pamac-tray-appindicator $(bindir)/pamac-tray-appindicator || echo > /dev/null install -Dm755 src/pamac-manager $(bindir)/pamac-manager install -Dm755 src/pamac-updater $(bindir)/pamac-updater install -Dm755 src/pamac-install $(bindir)/pamac-install install -Dm755 src/pamac-refresh $(bindir)/pamac-refresh install -Dm644 data/applications/pamac-tray.desktop $(sysconfdir)/xdg/autostart/pamac-tray.desktop + [ -e src/pamac-tray-appindicator ] && install -Dm644 data/applications/pamac-tray-appindicator.desktop $(sysconfdir)/xdg/autostart/pamac-tray-appindicator.desktop || echo > /dev/null install -Dm644 data/applications/pamac-manager.desktop $(datadir)/applications/pamac-manager.desktop install -Dm644 data/applications/pamac-updater.desktop $(datadir)/applications/pamac-updater.desktop install -Dm644 data/applications/pamac-install.desktop $(datadir)/applications/pamac-install.desktop @@ -61,11 +66,13 @@ uninstall: rm -f $(libdir)/libpamac.so rm -f $(bindir)/pamac-daemon rm -f $(bindir)/pamac-tray + rm -f $(bindir)/pamac-tray-appindicator rm -f $(bindir)/pamac-manager rm -f $(bindir)/pamac-updater rm -f $(bindir)/pamac-install rm -f $(bindir)/pamac-refresh rm -f $(sysconfdir)/xdg/autostart/pamac-tray.desktop + rm -f $(sysconfdir)/xdg/autostart/pamac-tray-appindicator.desktop rm -f $(datadir)/applications/pamac-manager.desktop rm -f $(datadir)/applications/pamac-updater.desktop rm -f $(datadir)/applications/pamac-install.desktop diff --git a/data/applications/pamac-tray-appindicator.desktop b/data/applications/pamac-tray-appindicator.desktop new file mode 100644 index 0000000..87ac63a --- /dev/null +++ b/data/applications/pamac-tray-appindicator.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=Update Notifier +Icon=update-notifier +Exec=pamac-tray-appindicator +Terminal=false +Type=Application +StartupNotify=true +OnlyShowIn=KDE; diff --git a/data/applications/pamac-tray.desktop b/data/applications/pamac-tray.desktop index e98a745..bec8686 100644 --- a/data/applications/pamac-tray.desktop +++ b/data/applications/pamac-tray.desktop @@ -5,3 +5,4 @@ Exec=pamac-tray Terminal=false Type=Application StartupNotify=true +NotShowIn=KDE; diff --git a/src/Makefile b/src/Makefile index 2b98c12..6456a63 100644 --- a/src/Makefile +++ b/src/Makefile @@ -45,7 +45,7 @@ INSTALLER_GRESOURCE_FILE = ../resources/pamac.installer.gresource.xml binaries: pamac-refresh pamac-daemon pamac-tray pamac-updater pamac-manager pamac-install clean: - rm -f *.c pamac.h pamac.vapi libpamac.so pamac-refresh pamac-daemon pamac-tray pamac-updater pamac-manager pamac-install + rm -f *.c pamac.h pamac.vapi libpamac.so pamac-refresh pamac-daemon pamac-tray pamac-tray-appindicator pamac-updater pamac-manager pamac-install pamac-refresh: pamac_config.vala refresh.vala valac -o pamac-refresh \ @@ -55,13 +55,23 @@ pamac-refresh: pamac_config.vala refresh.vala pamac_config.vala \ refresh.vala -pamac-tray: $(COMMON_SOURCES) alpm_config.vala tray.vala +pamac-tray: $(COMMON_SOURCES) alpm_config.vala tray.vala tray-gtk.vala valac -o pamac-tray \ + $(COMMON_VALA_FLAGS) \ + --pkg=gtk+-3.0 \ + --pkg=libnotify \ + $(COMMON_SOURCES) \ + tray-gtk.vala \ + tray.vala + +pamac-tray-appindicator: $(COMMON_SOURCES) alpm_config.vala tray.vala tray-appindicator.vala + valac -o pamac-tray-appindicator \ $(COMMON_VALA_FLAGS) \ --pkg=gtk+-3.0 \ --pkg=appindicator3-0.1 \ --pkg=libnotify \ $(COMMON_SOURCES) \ + tray-appindicator.vala \ tray.vala pamac-daemon: ../vapi/libalpm.vapi ../vapi/polkit-gobject-1.vapi ../vapi/libcurl.vapi alpm_config.vala $(COMMON_SOURCES) package.vala aur.vala mirrors_config.vala daemon.vala diff --git a/src/pamac-tray-appindicator b/src/pamac-tray-appindicator new file mode 100755 index 0000000000000000000000000000000000000000..56d079f444e381837e7869f28f08d5a55f2dcb57 GIT binary patch literal 92576 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 YE{a=yLuqr@rs^TV5Dg~wQaHN)4?M@Z{{R30 literal 0 HcmV?d00001 diff --git a/src/tray-appindicator.vala b/src/tray-appindicator.vala new file mode 100644 index 0000000..4531059 --- /dev/null +++ b/src/tray-appindicator.vala @@ -0,0 +1,63 @@ +/* + * pamac-vala + * + * Copyright (C) 2014-2016 Guillaume Benoit + * + * 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 3 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 get of the GNU General Public License + * along with this program. If not, see . + */ + +namespace Pamac { + + class IndicatorTrayIcon: TrayIcon { + AppIndicator.Indicator indicator_status_icon; + + public override void init_status_icon () { + indicator_status_icon = new AppIndicator.Indicator ("Update Manager", noupdate_icon_name, AppIndicator.IndicatorCategory.APPLICATION_STATUS); + indicator_status_icon.set_status (AppIndicator.IndicatorStatus.PASSIVE); + // add a item without label to not show it in menu + // this allow left click action + var item = new Gtk.MenuItem (); + item.visible = true; + item.activate.connect (left_clicked); + menu.append (item); + indicator_status_icon.set_menu (menu); + indicator_status_icon.set_secondary_activate_target (item); + } + + public override void set_tooltip (string info) { + indicator_status_icon.set_title (info); + } + + public override void set_icon (string icon) { + indicator_status_icon.set_icon_full (icon, icon); + } + + public override string get_icon () { + return indicator_status_icon.get_icon (); + } + + public override void set_icon_visible (bool visible) { + if (visible) { + indicator_status_icon.set_status (AppIndicator.IndicatorStatus.ACTIVE); + } else { + indicator_status_icon.set_status (AppIndicator.IndicatorStatus.PASSIVE); + } + } + } +} + +int main (string[] args) { + var tray_icon = new Pamac.IndicatorTrayIcon(); + return tray_icon.run (args); +} diff --git a/src/tray-gtk.vala b/src/tray-gtk.vala new file mode 100644 index 0000000..22e7544 --- /dev/null +++ b/src/tray-gtk.vala @@ -0,0 +1,62 @@ +/* + * pamac-vala + * + * Copyright (C) 2014-2016 Guillaume Benoit + * + * 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 3 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 get of the GNU General Public License + * along with this program. If not, see . + */ + +namespace Pamac { + + class GtkTrayIcon: TrayIcon { + Gtk.StatusIcon status_icon; + + public override void init_status_icon () { + status_icon = new Gtk.StatusIcon (); + status_icon.visible = false; + status_icon.activate.connect (left_clicked); + status_icon.popup_menu.connect (menu_popup); + } + + // Show popup menu on right button + void menu_popup (uint button, uint time) { + menu.popup (null, null, null, button, time); + } + + public override void set_tooltip (string info) { + status_icon.set_tooltip_markup (info); + } + + public override void set_icon (string icon) { + status_icon.set_from_icon_name (icon); + } + + public override string get_icon () { + return status_icon.get_icon_name (); + } + + public override void set_icon_visible (bool visible) { + if (visible) { + status_icon.visible = true; + } else { + status_icon.visible = false; + } + } + } +} + +int main (string[] args) { + var tray_icon = new Pamac.GtkTrayIcon(); + return tray_icon.run (args); +} diff --git a/src/tray.vala b/src/tray.vala index 75c5205..cecb643 100644 --- a/src/tray.vala +++ b/src/tray.vala @@ -39,24 +39,21 @@ namespace Pamac { public signal void write_alpm_config_finished (bool checkspace); } - class TrayIcon: Gtk.Application { + public abstract class TrayIcon: Gtk.Application { Notify.Notification notification; -//~ Notification notification; Daemon daemon; bool extern_lock; uint refresh_timeout_id; - Gtk.StatusIcon status_icon; - AppIndicator.Indicator indicator_status_icon; - Gtk.Menu menu; + public Gtk.Menu menu; GLib.File lockfile; - bool use_indicator; public TrayIcon () { application_id = "org.manjaro.pamac.tray"; flags = ApplicationFlags.FLAGS_NONE; - use_indicator = Environment.get_variable ("XDG_CURRENT_DESKTOP") == "KDE"; } + public abstract void init_status_icon (); + void start_daemon () { try { daemon = Bus.get_proxy_sync (BusType.SYSTEM, "org.manjaro.pamac", "/org/manjaro/pamac"); @@ -91,29 +88,11 @@ namespace Pamac { item = new Gtk.MenuItem.with_mnemonic (_("_Quit")); item.activate.connect (this.release); menu.append (item); - if (use_indicator) { - // add a item without label to not show it in menu - // this allow left click action - item = new Gtk.MenuItem (); - item.activate.connect (left_clicked); - menu.append (item); - indicator_status_icon.set_menu (menu); - indicator_status_icon.set_secondary_activate_target (item); - } menu.show_all (); } - // Show popup menu on right button - void menu_popup (uint button, uint time) { - menu.popup (null, null, null, button, time); - } - - void left_clicked () { - if (use_indicator) { - if (indicator_status_icon.get_icon () == "pamac-tray-update") { - execute_updater (); - } - } else if (status_icon.icon_name == "pamac-tray-update") { + public void left_clicked () { + if (get_icon () == "pamac-tray-update") { execute_updater (); } } @@ -134,14 +113,13 @@ namespace Pamac { } } - public void update_icon (string icon, string info) { - if (use_indicator) { - indicator_status_icon.set_icon_full (icon, icon); - } else { - status_icon.set_from_icon_name (icon); - status_icon.set_tooltip_markup (info); - } - } + public abstract void set_tooltip (string info); + + public abstract void set_icon (string icon); + + public abstract string get_icon (); + + public abstract void set_icon_visible (bool visible); bool start_refresh () { // if pamac is not running start refresh else just check updates @@ -160,11 +138,7 @@ namespace Pamac { void on_write_pamac_config_finished (bool recurse, uint64 refresh_period) { launch_refresh_timeout (refresh_period); if (refresh_period == 0) { - if (use_indicator) { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.PASSIVE); - } else { - status_icon.visible = false; - } + set_icon_visible (false); } else { check_updates (); } @@ -177,30 +151,16 @@ namespace Pamac { void on_get_updates_finished (Updates updates) { uint updates_nb = updates.repos_updates.length + updates.aur_updates.length; if (updates_nb == 0) { - update_icon (noupdate_icon_name, noupdate_info); + set_icon (noupdate_icon_name); + set_tooltip (noupdate_info); var pamac_config = new Pamac.Config ("/etc/pamac.conf"); - if (pamac_config.no_update_hide_icon) { - if (use_indicator) { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.PASSIVE); - } else { - status_icon.visible = false; - } - } else { - if (use_indicator) { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.ACTIVE); - } else { - status_icon.visible = true; - } - } + set_icon_visible (!pamac_config.no_update_hide_icon); close_notification(); } else { string info = ngettext ("%u available update", "%u available updates", updates_nb).printf (updates_nb); - this.update_icon (update_icon_name, info); - if (use_indicator) { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.ACTIVE); - } else { - status_icon.visible = true; - } + set_icon (update_icon_name); + set_tooltip (info); + set_icon_visible (true); if (check_pamac_running ()) { update_notification (info); } else { @@ -223,17 +183,6 @@ namespace Pamac { } void show_notification (string info) { -//~ notification = new Notification (_("Update Manager")); -//~ notification.set_body (info); -//~ Gtk.IconTheme icon_theme = Gtk.IconTheme.get_default (); -//~ Gdk.Pixbuf icon = icon_theme.load_icon ("system-software-update", 32, 0); -//~ notification.set_icon (icon); -//~ var action = new SimpleAction ("update", null); -//~ action.activate.connect (execute_updater); -//~ this.add_action (action); -//~ notification.add_button (_("Show available updates"), "app.update"); -//~ notification.set_default_action ("app.update"); -//~ this.send_notification (_("Update Manager"), notification); try { close_notification(); notification = new Notify.Notification (_("Update Manager"), info, "system-software-update"); @@ -347,22 +296,8 @@ namespace Pamac { extern_lock = false; refresh_timeout_id = 0; - if (use_indicator) { - indicator_status_icon = new AppIndicator.Indicator ("Update Manager", noupdate_icon_name, AppIndicator.IndicatorCategory.APPLICATION_STATUS); - indicator_status_icon.set_title (_("Update Manager")); - if (pamac_config.no_update_hide_icon) { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.PASSIVE); - } else { - indicator_status_icon.set_status (AppIndicator.IndicatorStatus.ACTIVE); - } - } else { - status_icon = new Gtk.StatusIcon (); - status_icon.visible = !(pamac_config.no_update_hide_icon); - status_icon.activate.connect (left_clicked); - status_icon.popup_menu.connect (menu_popup); - } - update_icon (noupdate_icon_name, noupdate_info); create_menu (); + init_status_icon (); Notify.init (_("Update Manager")); @@ -385,9 +320,5 @@ namespace Pamac { // nothing to do } - static int main (string[] args) { - var tray_icon = new TrayIcon(); - return tray_icon.run (args); - } } }