From 74fafa20c2a11d9c59db1016342eca1d240d7ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Buclin?= Date: Sat, 11 Mar 2017 19:45:14 +0100 Subject: Use DBus Menu + StatusNotifier 1.0 (mga#20410) --- NEWS | 2 ++ mgaapplet | 34 ++++++++++++++-------------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index 3137f1a1..ada0cf02 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,5 @@ +- use DBus Menu (requires StatusNotifier 1.0) (mga#20410) + Version 3.19 - 5 March 2017, Nicolas Lécureuil - use bigger icons for mgaaplet (mga#18107) diff --git a/mgaapplet b/mgaapplet index 04e08429..79541d70 100755 --- a/mgaapplet +++ b/mgaapplet @@ -42,11 +42,6 @@ use Net::DBus qw(:typing); use Rpmdrake::open_db; use Glib::Object::Introspection; -Glib::Object::Introspection->setup( - basename => 'StatusNotifier', - version => '0.1', - package => 'StatusNotifier'); - POSIX::sigprocmask(SIG_BLOCK, POSIX::SigSet->new(SIGCHLD)); if (!find { $_ eq '--auto-update' } @ARGV) { @@ -180,13 +175,16 @@ my ($icon, $is_plasma); # the deprecated GtkStatusIcon. if ($ENV{DESKTOP_SESSION} =~ /plasma$/i) { $is_plasma = 1; - $icon = StatusNotifier::Notifier->new_from_icon_name('mgaapplet', 'STATUS_NOTIFIER_CATEGORY_APPLICATION_STATUS', 'mgaonline'); + + Glib::Object::Introspection->setup( + basename => 'StatusNotifier', + version => '1.0', + package => 'StatusNotifier'); + + $icon = StatusNotifier::Item->new_from_icon_name('mgaapplet', 'STATUS_NOTIFIER_CATEGORY_APPLICATION_STATUS', 'mgaonline'); $icon->set_title('mgaapplet'); $icon->set_status('STATUS_NOTIFIER_STATUS_ACTIVE'); $icon->register; - $icon->signal_connect(context_menu => sub { - $menu->popup(undef, undef, undef, undef, 0, Gtk3::get_current_event_time()) if $menu; - }); } else { $icon = Gtk3::StatusIcon->new; @@ -636,14 +634,6 @@ sub checkUpdates() { member($state_global, qw(disconnected)) or silentCheck(); } -sub go2State { - my ($state) = @_; - $menu->destroy if $menu; - $menu = setState($state); - $state_global = $state; - gtkflush(); -} - sub shouldStart() { to_bool($local_config{AUTOSTART} ne 'FALSE'); } @@ -672,7 +662,7 @@ sub about_dialog() { return 1; } -sub setState { +sub go2State { my ($state) = @_; my $checkme; state $previous_state; @@ -731,7 +721,8 @@ sub setState { warn ">> ERR:$@" if $@; } - my $menu = Gtk3::Menu->new; + $menu->destroy if $menu; + $menu = Gtk3::Menu->new; foreach (@arr) { my $action = $actions{$_}; next if !ref($action->{launch}); @@ -745,7 +736,10 @@ sub setState { $menu->append(gtksignal_connect(gtkset_active($checkme = Gtk3::CheckMenuItem->new_with_label(N("Always launch on startup")), shouldStart()), toggled => sub { setAutoStart(uc(bool2text($checkme->get_active))) })); $checkme->show; $menu->append(gtksignal_connect(gtkshow(Gtk3::MenuItem->new_with_label(N("Quit"))), activate => sub { mainQuit() })); - $menu; + + $icon->set_context_menu($menu) if $is_plasma; + $state_global = $state; + gtkflush(); } sub setAutoStart { -- cgit v1.2.1