]>
Dogcows Code - chaz/openbox/blob - client_list_menu.c
97c40fe52c9e447450aec8f4b530c37b25952efa
12 #define MENU_NAME "client-list-menu"
14 static GSList
*desktop_menus
;
20 void plugin_setup_config() { }
22 static void desk_menu_update(ObMenuFrame
*frame
, gpointer data
)
24 ObMenu
*menu
= frame
->menu
;
25 DesktopData
*d
= data
;
29 menu_clear_entries(menu
);
31 for (it
= focus_order
[d
->desktop
], i
= 0; it
; it
= g_list_next(it
), ++i
) {
32 ObClient
*c
= it
->data
;
33 if (client_normal(c
)) {
39 act
= action_from_string("activate");
40 act
->data
.activate
.any
.c
= c
;
41 acts
= g_slist_prepend(NULL
, act
);
42 e
= menu_add_normal(menu
, i
,
43 (c
->iconic
? c
->icon_title
: c
->title
), acts
);
45 if ((icon
= client_icon(c
, 32, 32))) {
46 e
->data
.normal
.icon_width
= icon
->width
;
47 e
->data
.normal
.icon_height
= icon
->height
;
48 e
->data
.normal
.icon_data
= icon
->data
;
55 /* executes it without changing the client in the actions, since we set that
56 when we make the actions! */
57 static void desk_menu_execute(ObMenuEntry
*self
, gpointer data
)
61 for (it
= self
->data
.normal
.actions
; it
; it
= g_slist_next(it
))
63 ObAction
*act
= it
->data
;
64 act
->func(&act
->data
);
68 static void desk_menu_destroy(ObMenu
*menu
, gpointer data
)
70 DesktopData
*d
= data
;
75 static void self_update(ObMenuFrame
*frame
, gpointer data
)
77 ObMenu
*menu
= frame
->menu
;
82 for (i
= 0; i
< screen_num_desktops
; ++i
) {
85 gchar
*name
= g_strdup_printf("%s-%u", MENU_NAME
, i
);
86 DesktopData
*data
= g_new(DesktopData
, 1);
89 submenu
= menu_new(name
, screen_desktop_names
[i
], data
);
90 menu_set_update_func(submenu
, desk_menu_update
);
91 menu_set_execute_func(submenu
, desk_menu_execute
);
92 menu_set_destroy_func(submenu
, desk_menu_destroy
);
94 menu_add_submenu(menu
, i
, name
);
98 desktop_menus
= g_slist_append(desktop_menus
, submenu
);
100 it
= g_slist_next(it
);
102 for (; it
; it
= next
, ++i
) {
103 next
= g_slist_next(it
);
105 desktop_menus
= g_slist_delete_link(desktop_menus
, it
);
106 menu_entry_remove(menu_find_entry_id(menu
, i
));
110 void client_list_menu_startup()
114 menu
= menu_new(MENU_NAME
, _("Desktops"), NULL
);
115 menu_set_update_func(menu
, self_update
);
This page took 0.040921 seconds and 3 git commands to generate.