Handle menu changes.
This commit is contained in:
parent
4846f3619a
commit
c1f9ccce5b
@ -193,6 +193,8 @@ typedef struct _GtkQuartzActionObserver GtkQuartzActionObserver;
|
|||||||
|
|
||||||
- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added;
|
- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added;
|
||||||
|
|
||||||
|
- (gboolean)handleChanges;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
@ -309,6 +311,14 @@ gtk_quartz_action_observer_new (GNSMenuItem *item)
|
|||||||
return observer;
|
return observer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gtk_quartz_menu_handle_changes (gpointer user_data)
|
||||||
|
{
|
||||||
|
GNSMenu *menu = user_data;
|
||||||
|
|
||||||
|
return [menu handleChanges];
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_quartz_menu_items_changed (GMenuModel *model,
|
gtk_quartz_menu_items_changed (GMenuModel *model,
|
||||||
gint position,
|
gint position,
|
||||||
@ -340,6 +350,8 @@ gtk_quartz_set_main_menu (GMenuModel *model,
|
|||||||
|
|
||||||
- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added
|
- (void)model:(GMenuModel *)model didChangeAtPosition:(NSInteger)position removed:(NSInteger)removed added:(NSInteger)added
|
||||||
{
|
{
|
||||||
|
if (update_idle == 0)
|
||||||
|
update_idle = gdk_threads_add_idle (gtk_quartz_menu_handle_changes, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)appendItemFromModel:(GMenuModel *)aModel atIndex:(gint)index withHeading:(gchar **)heading
|
- (void)appendItemFromModel:(GMenuModel *)aModel atIndex:(gint)index withHeading:(gchar **)heading
|
||||||
@ -400,6 +412,23 @@ gtk_quartz_set_main_menu (GMenuModel *model,
|
|||||||
[self appendFromModel:model withSeparators:with_separators];
|
[self appendFromModel:model withSeparators:with_separators];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (gboolean)handleChanges
|
||||||
|
{
|
||||||
|
while (connected)
|
||||||
|
{
|
||||||
|
g_signal_handlers_disconnect_by_func (connected->data, gtk_quartz_menu_items_changed, self);
|
||||||
|
g_object_unref (connected->data);
|
||||||
|
|
||||||
|
connected = g_slist_delete_link (connected, connected);
|
||||||
|
}
|
||||||
|
|
||||||
|
[self populate];
|
||||||
|
|
||||||
|
update_idle = 0;
|
||||||
|
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
- (id)initWithTitle:(NSString *)title model:(GMenuModel *)aModel actions:(GActionObservable *)someActions hasSeparators:(BOOL)hasSeparators
|
- (id)initWithTitle:(NSString *)title model:(GMenuModel *)aModel actions:(GActionObservable *)someActions hasSeparators:(BOOL)hasSeparators
|
||||||
{
|
{
|
||||||
if((self = [super initWithTitle:title]) != nil)
|
if((self = [super initWithTitle:title]) != nil)
|
||||||
|
Loading…
Reference in New Issue
Block a user