Skip to content

Commit 8013f4c

Browse files
committed
Don't segfault when opening and closing the status icon context menu.
This works around a bug in xapp that was intermittently causing a segfault when opening and closing the status icon context menu. It has the added benefit of only rebuilding the menu when a group changes. Fixes #149
1 parent 2376aab commit 8013f4c

1 file changed

Lines changed: 36 additions & 28 deletions

File tree

usr/lib/sticky/sticky.py

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -891,49 +891,53 @@ def create_status_icon(self):
891891
_("Middle click to toggle the manager")))
892892
self.status_icon.set_visible(True)
893893
self.status_icon.connect('button-press-event', self.on_tray_button_pressed)
894-
self.status_icon.connect('button-release-event', self.on_tray_button_released)
894+
895+
self.rebuild_tray_context_menu()
895896

896897
def on_tray_button_pressed(self, icon, x, y , button, time, panel_position):
897898
if button == 1:
898899
self.activate_notes(time)
899900
elif button == 2:
900901
self.toggle_manager(time)
901902

902-
def on_tray_button_released(self, icon, x, y , button, time, panel_position):
903-
if button == 3:
904-
menu = Gtk.Menu()
905-
item = Gtk.MenuItem(label=_("New Note"))
906-
item.connect('activate', self.new_note)
907-
menu.append(item)
903+
def rebuild_tray_context_menu(self):
904+
if self.status_icon is None:
905+
return
908906

909-
item = Gtk.MenuItem(label=_("Manage Notes"))
910-
item.connect('activate', self.open_manager)
911-
menu.append(item)
907+
self.context_menu = Gtk.Menu()
908+
item = Gtk.MenuItem(label=_("New Note"))
909+
item.connect('activate', self.new_note)
910+
self.context_menu.append(item)
912911

913-
menu.append(Gtk.SeparatorMenuItem())
912+
item = Gtk.MenuItem(label=_("Manage Notes"))
913+
item.connect('activate', self.open_manager)
914+
self.context_menu.append(item)
914915

915-
for group in self.file_handler.get_note_group_names():
916-
item = Gtk.RadioMenuItem(label=group)
917-
if group == self.settings.get_string('active-group'):
918-
item.set_active(True)
919-
else:
920-
item.connect('activate', self.on_tray_group_selected, group)
921-
menu.append(item)
916+
self.context_menu.append(Gtk.SeparatorMenuItem())
922917

923-
menu.append(Gtk.SeparatorMenuItem())
918+
for group in self.file_handler.get_note_group_names():
919+
item = Gtk.RadioMenuItem(label=group)
920+
if group == self.settings.get_string('active-group'):
921+
item.set_active(True)
922+
else:
923+
item.connect('activate', self.on_tray_group_selected, group)
924+
self.context_menu.append(item)
924925

925-
item = Gtk.MenuItem(label=_("Preferences"))
926-
item.connect('activate', self.open_settings_window)
927-
menu.append(item)
926+
self.context_menu.append(Gtk.SeparatorMenuItem())
928927

929-
menu.append(Gtk.SeparatorMenuItem())
928+
item = Gtk.MenuItem(label=_("Preferences"))
929+
item.connect('activate', self.open_settings_window)
930+
self.context_menu.append(item)
930931

931-
item = Gtk.MenuItem(label=_("Quit"))
932-
item.connect('activate', self.quit_app)
933-
menu.append(item)
932+
self.context_menu.append(Gtk.SeparatorMenuItem())
934933

935-
menu.show_all()
936-
self.status_icon.popup_menu(menu, x, y, button, time, panel_position)
934+
item = Gtk.MenuItem(label=_("Quit"))
935+
item.connect('activate', self.quit_app)
936+
self.context_menu.append(item)
937+
938+
self.context_menu.show_all()
939+
940+
self.status_icon.set_secondary_menu(self.context_menu)
937941

938942
def destroy_status_icon(self):
939943
self.status_icon.set_visible(False)
@@ -1120,6 +1124,8 @@ def on_lists_changed(self, *args):
11201124
else:
11211125
self.load_notes()
11221126

1127+
self.rebuild_tray_context_menu()
1128+
11231129
def on_group_changed(self, f, group_name):
11241130
if self.note_group == group_name:
11251131
self.load_notes()
@@ -1131,6 +1137,8 @@ def on_group_name_changed(self, f, old_name, new_name):
11311137
if self.settings.get_string('active-group') == old_name:
11321138
self.settings.set_string('active-group', new_name)
11331139

1140+
self.rebuild_tray_context_menu()
1141+
11341142
def on_save(self, *args):
11351143
self.get_dbus_connection().emit_signal(None, DBUS_PATH, APPLICATION_ID, 'NotesChanged', None)
11361144

0 commit comments

Comments
 (0)