171
169
that they're on, and then the individual entries. Each
172
170
is progressively more expensive. */
174
place_in_menu (GtkWidget * widget, gpointer user_data)
176
incoming_position_t * position = (incoming_position_t *)user_data;
177
if (position->found) {
178
/* We've already been placed, just finish the foreach */
182
IndicatorObject * io = INDICATOR_OBJECT(g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_OBJECT));
183
g_assert(io != NULL);
185
gint objposition = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER));
186
/* We've already passed it, well, then this is where
187
we should be be. Stop! */
188
if (objposition > position->objposition) {
189
position->found = TRUE;
193
/* The objects don't match yet, keep looking */
194
if (objposition < position->objposition) {
199
/* The objects are the same, let's start looking at entries. */
200
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
201
gint entryposition = indicator_object_get_location(io, entry);
203
if (entryposition > position->entryposition) {
204
position->found = TRUE;
208
if (entryposition < position->entryposition) {
213
/* We've got the same object and the same entry. Well,
214
let's just put it right here then. */
215
position->found = TRUE;
172
place_in_menu_cb (GtkWidget * widget, gpointer user_data)
174
incoming_position_t * position = (incoming_position_t *)user_data;
175
if (position->found) {
176
/* We've already been placed, just finish the foreach */
180
IndicatorObject * io = INDICATOR_OBJECT(g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_OBJECT));
181
g_return_if_fail(INDICATOR_IS_OBJECT(io));
183
gint objposition = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER));
184
/* We've already passed it, well, then this is where
185
we should be be. Stop! */
186
if (objposition > position->objposition) {
187
position->found = TRUE;
191
/* The objects don't match yet, keep looking */
192
if (objposition < position->objposition) {
197
/* The objects are the same, let's start looking at entries. */
198
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
199
gint entryposition = indicator_object_get_location(io, entry);
201
if (entryposition > position->entryposition) {
202
position->found = TRUE;
206
if (entryposition < position->entryposition) {
211
/* We've got the same object and the same entry. Well,
212
let's just put it right here then. */
213
position->found = TRUE;
217
/* Position the entry */
219
place_in_menu (GtkWidget *menubar,
222
IndicatorObjectEntry *entry)
224
incoming_position_t position;
226
/* Start with the default position for this indicator object */
227
gint io_position = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER));
229
/* If name-hint is set, try to find the entry's position */
230
if (entry->name_hint != NULL) {
231
const gchar *name = (const gchar *)g_object_get_data(G_OBJECT(io), IO_DATA_NAME);
232
gint entry_position = name2order(name, entry->name_hint);
234
/* If we don't find the entry, fall back to the indicator object's position */
235
if (entry_position > -1)
236
io_position = entry_position;
239
position.objposition = io_position;
240
position.entryposition = indicator_object_get_location(io, entry);
241
position.menupos = 0;
242
position.found = FALSE;
244
gtk_container_foreach(GTK_CONTAINER(menubar), place_in_menu_cb, &position);
246
gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), menuitem, position.menupos);
220
250
something_shown (GtkWidget * widget, gpointer user_data)
222
GtkWidget * menuitem = GTK_WIDGET(user_data);
223
gtk_widget_show(menuitem);
252
GtkWidget * menuitem = GTK_WIDGET(user_data);
253
gtk_widget_show(menuitem);
227
257
something_hidden (GtkWidget * widget, gpointer user_data)
229
GtkWidget * menuitem = GTK_WIDGET(user_data);
230
gtk_widget_hide(menuitem);
259
GtkWidget * menuitem = GTK_WIDGET(user_data);
260
gtk_widget_hide(menuitem);
234
264
sensitive_cb (GObject * obj, GParamSpec * pspec, gpointer user_data)
236
g_return_if_fail(GTK_IS_WIDGET(obj));
237
g_return_if_fail(GTK_IS_WIDGET(user_data));
266
g_return_if_fail(GTK_IS_WIDGET(obj));
267
g_return_if_fail(GTK_IS_WIDGET(user_data));
239
gtk_widget_set_sensitive(GTK_WIDGET(user_data), gtk_widget_get_sensitive(GTK_WIDGET(obj)));
269
gtk_widget_set_sensitive(GTK_WIDGET(user_data), gtk_widget_get_sensitive(GTK_WIDGET(obj)));
244
274
entry_activated (GtkWidget * widget, gpointer user_data)
246
g_return_if_fail(GTK_IS_WIDGET(widget));
247
gpointer pio = g_object_get_data(G_OBJECT(widget), "indicator");
248
g_return_if_fail(INDICATOR_IS_OBJECT(pio));
249
IndicatorObject * io = INDICATOR_OBJECT(pio);
251
return indicator_object_entry_activate(io, (IndicatorObjectEntry *)user_data, gtk_get_current_event_time());
276
g_return_if_fail(GTK_IS_WIDGET(widget));
278
IndicatorObject *io = g_object_get_data (G_OBJECT (widget), MENU_DATA_INDICATOR_OBJECT);
279
IndicatorObjectEntry *entry = g_object_get_data (G_OBJECT (widget), MENU_DATA_INDICATOR_ENTRY);
281
g_return_if_fail(INDICATOR_IS_OBJECT(io));
283
return indicator_object_entry_activate(io, entry, gtk_get_current_event_time());
287
entry_secondary_activated (GtkWidget * widget, GdkEvent * event, gpointer user_data)
289
g_return_val_if_fail(GTK_IS_WIDGET(widget), FALSE);
291
switch (event->type) {
292
case GDK_ENTER_NOTIFY:
293
g_object_set_data(G_OBJECT(widget), MENU_DATA_IN_MENUITEM, GINT_TO_POINTER(TRUE));
296
case GDK_LEAVE_NOTIFY:
297
g_object_set_data(G_OBJECT(widget), MENU_DATA_IN_MENUITEM, GINT_TO_POINTER(FALSE));
298
g_object_set_data(G_OBJECT(widget), MENU_DATA_MENUITEM_PRESSED, GINT_TO_POINTER(FALSE));
301
case GDK_BUTTON_PRESS:
302
if (event->button.button == 2) {
303
g_object_set_data(G_OBJECT(widget), MENU_DATA_MENUITEM_PRESSED, GINT_TO_POINTER(TRUE));
307
case GDK_BUTTON_RELEASE:
308
if (event->button.button == 2) {
309
gboolean in_menuitem = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), MENU_DATA_IN_MENUITEM));
310
gboolean menuitem_pressed = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), MENU_DATA_MENUITEM_PRESSED));
312
if (in_menuitem && menuitem_pressed) {
313
g_object_set_data(G_OBJECT(widget), MENU_DATA_MENUITEM_PRESSED, GINT_TO_POINTER(FALSE));
315
IndicatorObject *io = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_OBJECT);
316
IndicatorObjectEntry *entry = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
318
g_return_val_if_fail(INDICATOR_IS_OBJECT(io), FALSE);
320
g_signal_emit_by_name(io, INDICATOR_OBJECT_SIGNAL_SECONDARY_ACTIVATE,
321
entry, event->button.time);
255
331
entry_scrolled (GtkWidget *menuitem, GdkEventScroll *event, gpointer data)
257
IndicatorObject *io = g_object_get_data (G_OBJECT (menuitem), MENU_DATA_INDICATOR_OBJECT);
258
IndicatorObjectEntry *entry = g_object_get_data (G_OBJECT (menuitem), MENU_DATA_INDICATOR_ENTRY);
260
g_return_val_if_fail(INDICATOR_IS_OBJECT(io), FALSE);
262
g_signal_emit_by_name (io, "scroll", 1, event->direction);
263
g_signal_emit_by_name (io, "scroll-entry", entry, 1, event->direction);
333
g_return_val_if_fail(GTK_IS_WIDGET(menuitem), FALSE);
335
IndicatorObject *io = g_object_get_data (G_OBJECT (menuitem), MENU_DATA_INDICATOR_OBJECT);
336
IndicatorObjectEntry *entry = g_object_get_data (G_OBJECT (menuitem), MENU_DATA_INDICATOR_ENTRY);
338
g_return_val_if_fail(INDICATOR_IS_OBJECT(io), FALSE);
340
g_signal_emit_by_name (io, INDICATOR_OBJECT_SIGNAL_ENTRY_SCROLLED, entry, 1, event->direction);
269
346
accessible_desc_update_cb (GtkWidget * widget, gpointer userdata)
271
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
273
if (data != userdata) {
277
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)data;
278
update_accessible_desc(entry, widget);
348
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
350
if (data != userdata) {
354
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)data;
355
update_accessible_desc(entry, widget);
282
359
accessible_desc_update (IndicatorObject * io, IndicatorObjectEntry * entry, GtkWidget * menubar)
284
gtk_container_foreach(GTK_CONTAINER(menubar), accessible_desc_update_cb, entry);
361
gtk_container_foreach(GTK_CONTAINER(menubar), accessible_desc_update_cb, entry);
289
366
entry_added (IndicatorObject * io, IndicatorObjectEntry * entry, GtkWidget * menubar)
291
g_debug("Signal: Entry Added");
292
gboolean something_visible = FALSE;
293
gboolean something_sensitive = FALSE;
295
GtkWidget * menuitem = gtk_menu_item_new();
296
GtkWidget * box = (packdirection == GTK_PACK_DIRECTION_LTR) ?
297
gtk_hbox_new(FALSE, 3) : gtk_vbox_new(FALSE, 3);
299
g_object_set_data (G_OBJECT (menuitem), "indicator", io);
300
g_object_set_data (G_OBJECT (menuitem), "box", box);
302
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(entry_activated), entry);
303
g_signal_connect(G_OBJECT(menuitem), "scroll-event", G_CALLBACK(entry_scrolled), entry);
305
if (entry->image != NULL) {
306
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->image), FALSE, FALSE, 1);
307
if (gtk_widget_get_visible(GTK_WIDGET(entry->image))) {
308
something_visible = TRUE;
311
if (gtk_widget_get_sensitive(GTK_WIDGET(entry->image))) {
312
something_sensitive = TRUE;
315
g_signal_connect(G_OBJECT(entry->image), "show", G_CALLBACK(something_shown), menuitem);
316
g_signal_connect(G_OBJECT(entry->image), "hide", G_CALLBACK(something_hidden), menuitem);
318
g_signal_connect(G_OBJECT(entry->image), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
320
if (entry->label != NULL) {
321
switch(packdirection) {
322
case GTK_PACK_DIRECTION_LTR:
323
gtk_label_set_angle(GTK_LABEL(entry->label), 0.0);
325
case GTK_PACK_DIRECTION_TTB:
326
gtk_label_set_angle(GTK_LABEL(entry->label),
327
(orient == PANEL_APPLET_ORIENT_LEFT) ?
333
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->label), FALSE, FALSE, 1);
335
if (gtk_widget_get_visible(GTK_WIDGET(entry->label))) {
336
something_visible = TRUE;
339
if (gtk_widget_get_sensitive(GTK_WIDGET(entry->label))) {
340
something_sensitive = TRUE;
343
g_signal_connect(G_OBJECT(entry->label), "show", G_CALLBACK(something_shown), menuitem);
344
g_signal_connect(G_OBJECT(entry->label), "hide", G_CALLBACK(something_hidden), menuitem);
346
g_signal_connect(G_OBJECT(entry->label), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
348
gtk_container_add(GTK_CONTAINER(menuitem), box);
349
gtk_widget_show(box);
351
if (entry->menu != NULL) {
352
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), GTK_WIDGET(entry->menu));
355
incoming_position_t position;
356
position.objposition = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER));
357
position.entryposition = indicator_object_get_location(io, entry);
358
position.menupos = 0;
359
position.found = FALSE;
361
gtk_container_foreach(GTK_CONTAINER(menubar), place_in_menu, &position);
363
gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), menuitem, position.menupos);
365
if (something_visible) {
366
if (entry->accessible_desc != NULL) {
367
update_accessible_desc(entry, menuitem);
369
gtk_widget_show(menuitem);
371
gtk_widget_set_sensitive(menuitem, something_sensitive);
373
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_ENTRY, entry);
374
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_OBJECT, io);
368
const char *indicator_name = (const gchar *)g_object_get_data(G_OBJECT(io), IO_DATA_NAME);
369
g_debug("Signal: Entry Added from %s", indicator_name);
370
gboolean something_visible = FALSE;
371
gboolean something_sensitive = FALSE;
373
GtkWidget * menuitem = gtk_menu_item_new();
374
GtkWidget * box = (packdirection == GTK_PACK_DIRECTION_LTR) ?
375
gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 3) : gtk_box_new(GTK_ORIENTATION_VERTICAL, 3);
377
g_object_set_data (G_OBJECT (menuitem), MENU_DATA_BOX, box);
378
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_ENTRY, entry);
379
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_INDICATOR_OBJECT, io);
381
g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(entry_activated), NULL);
382
g_signal_connect(G_OBJECT(menuitem), "button-press-event", G_CALLBACK(entry_secondary_activated), NULL);
383
g_signal_connect(G_OBJECT(menuitem), "button-release-event", G_CALLBACK(entry_secondary_activated), NULL);
384
g_signal_connect(G_OBJECT(menuitem), "enter-notify-event", G_CALLBACK(entry_secondary_activated), NULL);
385
g_signal_connect(G_OBJECT(menuitem), "leave-notify-event", G_CALLBACK(entry_secondary_activated), NULL);
386
g_signal_connect(G_OBJECT(menuitem), "scroll-event", G_CALLBACK(entry_scrolled), NULL);
388
if (entry->image != NULL) {
389
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->image), FALSE, FALSE, 1);
390
if (gtk_widget_get_visible(GTK_WIDGET(entry->image))) {
391
something_visible = TRUE;
394
if (gtk_widget_get_sensitive(GTK_WIDGET(entry->image))) {
395
something_sensitive = TRUE;
398
g_signal_connect(G_OBJECT(entry->image), "show", G_CALLBACK(something_shown), menuitem);
399
g_signal_connect(G_OBJECT(entry->image), "hide", G_CALLBACK(something_hidden), menuitem);
401
g_signal_connect(G_OBJECT(entry->image), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
403
if (entry->label != NULL) {
404
switch(packdirection) {
405
case GTK_PACK_DIRECTION_LTR:
406
gtk_label_set_angle(GTK_LABEL(entry->label), 0.0);
408
case GTK_PACK_DIRECTION_TTB:
409
gtk_label_set_angle(GTK_LABEL(entry->label),
410
(orient == PANEL_APPLET_ORIENT_LEFT) ?
416
gtk_box_pack_start(GTK_BOX(box), GTK_WIDGET(entry->label), FALSE, FALSE, 1);
418
if (gtk_widget_get_visible(GTK_WIDGET(entry->label))) {
419
something_visible = TRUE;
422
if (gtk_widget_get_sensitive(GTK_WIDGET(entry->label))) {
423
something_sensitive = TRUE;
426
g_signal_connect(G_OBJECT(entry->label), "show", G_CALLBACK(something_shown), menuitem);
427
g_signal_connect(G_OBJECT(entry->label), "hide", G_CALLBACK(something_hidden), menuitem);
429
g_signal_connect(G_OBJECT(entry->label), "notify::sensitive", G_CALLBACK(sensitive_cb), menuitem);
431
gtk_container_add(GTK_CONTAINER(menuitem), box);
432
gtk_widget_show(box);
434
if (entry->menu != NULL) {
435
gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), GTK_WIDGET(entry->menu));
438
place_in_menu(menubar, menuitem, io, entry);
440
if (something_visible) {
441
if (entry->accessible_desc != NULL) {
442
update_accessible_desc(entry, menuitem);
444
gtk_widget_show(menuitem);
446
gtk_widget_set_sensitive(menuitem, something_sensitive);
380
452
entry_removed_cb (GtkWidget * widget, gpointer userdata)
382
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
384
if (data != userdata) {
388
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)data;
389
if (entry->label != NULL) {
390
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_shown), widget);
391
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_hidden), widget);
392
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(sensitive_cb), widget);
394
if (entry->image != NULL) {
395
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_shown), widget);
396
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_hidden), widget);
397
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(sensitive_cb), widget);
400
gtk_widget_destroy(widget);
454
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
456
if (data != userdata) {
460
IndicatorObjectEntry * entry = (IndicatorObjectEntry *)data;
461
if (entry->label != NULL) {
462
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_shown), widget);
463
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(something_hidden), widget);
464
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->label), G_CALLBACK(sensitive_cb), widget);
466
if (entry->image != NULL) {
467
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_shown), widget);
468
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(something_hidden), widget);
469
g_signal_handlers_disconnect_by_func(G_OBJECT(entry->image), G_CALLBACK(sensitive_cb), widget);
472
gtk_widget_destroy(widget);
405
477
entry_removed (IndicatorObject * io G_GNUC_UNUSED, IndicatorObjectEntry * entry,
406
478
gpointer user_data)
408
g_debug("Signal: Entry Removed");
410
gtk_container_foreach(GTK_CONTAINER(user_data), entry_removed_cb, entry);
480
g_debug("Signal: Entry Removed");
482
gtk_container_foreach(GTK_CONTAINER(user_data), entry_removed_cb, entry);
416
488
entry_moved_find_cb (GtkWidget * widget, gpointer userdata)
418
gpointer * array = (gpointer *)userdata;
419
if (array[1] != NULL) {
423
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
425
if (data != array[0]) {
490
gpointer * array = (gpointer *)userdata;
491
if (array[1] != NULL) {
495
gpointer data = g_object_get_data(G_OBJECT(widget), MENU_DATA_INDICATOR_ENTRY);
497
if (data != array[0]) {
433
505
/* Gets called when an entry for an object was moved. */
435
507
entry_moved (IndicatorObject * io, IndicatorObjectEntry * entry,
436
508
gint old G_GNUC_UNUSED, gint new G_GNUC_UNUSED, gpointer user_data)
438
GtkWidget * menubar = GTK_WIDGET(user_data);
444
gtk_container_foreach(GTK_CONTAINER(menubar), entry_moved_find_cb, array);
445
if (array[1] == NULL) {
446
g_warning("Moving an entry that isn't in our menus.");
450
GtkWidget * mi = GTK_WIDGET(array[1]);
451
g_object_ref(G_OBJECT(mi));
452
gtk_container_remove(GTK_CONTAINER(menubar), mi);
454
incoming_position_t position;
455
position.objposition = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER));
456
position.entryposition = indicator_object_get_location(io, entry);
457
position.menupos = 0;
458
position.found = FALSE;
460
gtk_container_foreach(GTK_CONTAINER(menubar), place_in_menu, &position);
462
gtk_menu_shell_insert(GTK_MENU_SHELL(menubar), mi, position.menupos);
463
g_object_unref(G_OBJECT(mi));
510
GtkWidget * menubar = GTK_WIDGET(user_data);
516
gtk_container_foreach(GTK_CONTAINER(menubar), entry_moved_find_cb, array);
517
if (array[1] == NULL) {
518
g_warning("Moving an entry that isn't in our menus.");
522
GtkWidget * mi = GTK_WIDGET(array[1]);
523
g_object_ref(G_OBJECT(mi));
524
gtk_container_remove(GTK_CONTAINER(menubar), mi);
525
place_in_menu(menubar, mi, io, entry);
526
g_object_unref(G_OBJECT(mi));
469
532
menu_show (IndicatorObject * io, IndicatorObjectEntry * entry,
470
533
guint32 timestamp, gpointer user_data)
472
GtkWidget * menubar = GTK_WIDGET(user_data);
475
/* Close any open menus instead of opening one */
476
GList * entries = indicator_object_get_entries(io);
477
GList * entry = NULL;
478
for (entry = entries; entry != NULL; entry = g_list_next(entry)) {
479
IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data;
480
gtk_menu_popdown(entrydata->menu);
482
g_list_free(entries);
484
/* And tell the menubar to exit activation mode too */
485
gtk_menu_shell_cancel(GTK_MENU_SHELL(menubar));
489
// TODO: do something sensible here
535
GtkWidget * menubar = GTK_WIDGET(user_data);
538
/* Close any open menus instead of opening one */
539
GList * entries = indicator_object_get_entries(io);
540
GList * entry = NULL;
541
for (entry = entries; entry != NULL; entry = g_list_next(entry)) {
542
IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data;
543
gtk_menu_popdown(entrydata->menu);
545
g_list_free(entries);
547
/* And tell the menubar to exit activation mode too */
548
gtk_menu_shell_cancel(GTK_MENU_SHELL(menubar));
552
// TODO: do something sensible here
493
556
update_accessible_desc(IndicatorObjectEntry * entry, GtkWidget * menuitem)
495
/* FIXME: We need to deal with the use case where the contents of the
496
label overrides what is found in the atk object's name, or at least
497
orca speaks the label instead of the atk object name.
499
AtkObject * menuitem_obj = gtk_widget_get_accessible(menuitem);
500
if (menuitem_obj == NULL) {
501
/* Should there be an error printed here? */
558
/* FIXME: We need to deal with the use case where the contents of the
559
label overrides what is found in the atk object's name, or at least
560
orca speaks the label instead of the atk object name.
562
AtkObject * menuitem_obj = gtk_widget_get_accessible(menuitem);
563
if (menuitem_obj == NULL) {
564
/* Should there be an error printed here? */
505
if (entry->accessible_desc != NULL) {
506
atk_object_set_name(menuitem_obj, entry->accessible_desc);
508
atk_object_set_name(menuitem_obj, "");
568
if (entry->accessible_desc != NULL) {
569
atk_object_set_name(menuitem_obj, entry->accessible_desc);
571
atk_object_set_name(menuitem_obj, "");
515
578
load_module (const gchar * name, GtkWidget * menubar)
517
g_debug("Looking at Module: %s", name);
518
g_return_val_if_fail(name != NULL, FALSE);
520
if (!g_str_has_suffix(name, G_MODULE_SUFFIX)) {
524
g_debug("Loading Module: %s", name);
526
/* Build the object for the module */
527
gchar * fullpath = g_build_filename(INDICATOR_DIR, name, NULL);
528
IndicatorObject * io = indicator_object_new_from_file(fullpath);
531
/* Set the environment it's in */
532
indicator_object_set_environment(io, (const GStrv)indicator_env);
534
/* Attach the 'name' to the object */
535
g_object_set_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER, GINT_TO_POINTER(name2order(name)));
537
/* Connect to its signals */
538
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(entry_added), menubar);
539
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(entry_removed), menubar);
540
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, G_CALLBACK(entry_moved), menubar);
541
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW, G_CALLBACK(menu_show), menubar);
542
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE, G_CALLBACK(accessible_desc_update), menubar);
544
/* Work on the entries */
545
GList * entries = indicator_object_get_entries(io);
546
GList * entry = NULL;
548
for (entry = entries; entry != NULL; entry = g_list_next(entry)) {
549
IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data;
550
entry_added(io, entrydata, menubar);
553
g_list_free(entries);
580
g_debug("Looking at Module: %s", name);
581
g_return_val_if_fail(name != NULL, FALSE);
583
if (!g_str_has_suffix(name, G_MODULE_SUFFIX)) {
587
g_debug("Loading Module: %s", name);
589
/* Build the object for the module */
590
gchar * fullpath = g_build_filename(INDICATOR_DIR, name, NULL);
591
IndicatorObject * io = indicator_object_new_from_file(fullpath);
594
/* Set the environment it's in */
595
indicator_object_set_environment(io, (const GStrv)indicator_env);
597
/* Attach the 'name' to the object */
598
g_object_set_data_full(G_OBJECT(io), IO_DATA_NAME, g_strdup(name), g_free);
599
g_object_set_data(G_OBJECT(io), IO_DATA_ORDER_NUMBER, GINT_TO_POINTER(name2order(name, NULL)));
601
/* Connect to its signals */
602
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_ADDED, G_CALLBACK(entry_added), menubar);
603
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_REMOVED, G_CALLBACK(entry_removed), menubar);
604
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ENTRY_MOVED, G_CALLBACK(entry_moved), menubar);
605
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_MENU_SHOW, G_CALLBACK(menu_show), menubar);
606
g_signal_connect(G_OBJECT(io), INDICATOR_OBJECT_SIGNAL_ACCESSIBLE_DESC_UPDATE, G_CALLBACK(accessible_desc_update), menubar);
608
/* Work on the entries */
609
GList * entries = indicator_object_get_entries(io);
610
GList * entry = NULL;
612
for (entry = entries; entry != NULL; entry = g_list_next(entry)) {
613
IndicatorObjectEntry * entrydata = (IndicatorObjectEntry *)entry->data;
614
entry_added(io, entrydata, menubar);
617
g_list_free(entries);
559
hotkey_filter (char * keystring G_GNUC_UNUSED, gpointer data)
623
hotkey_filter (char * keystring, gpointer data)
561
g_return_if_fail(GTK_IS_MENU_SHELL(data));
563
/* Oh, wow, it's us! */
564
GList * children = gtk_container_get_children(GTK_CONTAINER(data));
565
if (children == NULL) {
566
g_debug("Menubar has no children");
570
if (!GTK_MENU_SHELL(data)->active) {
571
gtk_grab_add (GTK_WIDGET(data));
572
GTK_MENU_SHELL(data)->have_grab = TRUE;
573
GTK_MENU_SHELL(data)->active = TRUE;
576
gtk_menu_shell_select_item(GTK_MENU_SHELL(data), GTK_WIDGET(g_list_last(children)->data));
577
g_list_free(children);
625
g_return_if_fail(GTK_IS_MENU_SHELL(data));
627
g_debug ("Hotkey: %s", keystring);
629
/* Oh, wow, it's us! */
630
GList * children = gtk_container_get_children(GTK_CONTAINER(data));
631
if (children == NULL) {
632
g_debug("Menubar has no children");
636
gtk_menu_shell_select_item(GTK_MENU_SHELL(data), GTK_WIDGET(g_list_last(children)->data));
637
g_list_free(children);
621
669
"PURPOSE. See the GNU General Public License for more details."),
622
670
N_("You should have received a copy of the GNU General Public License along "
623
671
"with this program. If not, see <http://www.gnu.org/licenses/>."),
628
license_i18n = g_strconcat (_(license[0]), "\n\n", _(license[1]), "\n\n", _(license[2]), NULL);
630
gtk_show_about_dialog(NULL,
632
"copyright", "Copyright \xc2\xa9 2009-2010 Canonical, Ltd.",
676
license_i18n = g_strconcat (_(license[0]), "\n\n", _(license[1]), "\n\n", _(license[2]), NULL);
678
gtk_show_about_dialog(NULL,
680
"copyright", "Copyright \xc2\xa9 2009-2010 Canonical, Ltd.",
633
681
#ifdef INDICATOR_APPLET_SESSION
634
"comments", _("A place to adjust your status, change users or exit your session."),
682
"comments", _("A place to adjust your status, change users or exit your session."),
636
684
#ifdef INDICATOR_APPLET_APPMENU
637
"comments", _("An applet to hold your application menus."),
639
"comments", _("An applet to hold all of the system indicators."),
642
"license", license_i18n,
643
"wrap-license", TRUE,
644
"translator-credits", _("translator-credits"),
645
"logo-icon-name", "indicator-applet",
646
"icon-name", "indicator-applet",
647
"website", "http://launchpad.net/indicator-applet",
648
"website-label", _("Indicator Applet Website"),
652
g_free (license_i18n);
685
"comments", _("An applet to hold your application menus."),
687
"comments", _("An applet to hold all of the system indicators."),
690
"license", license_i18n,
691
"wrap-license", TRUE,
692
"translator-credits", _("translator-credits"),
693
"logo-icon-name", "indicator-applet",
694
"icon-name", "indicator-applet",
695
"website", "http://launchpad.net/indicator-applet",
696
"website-label", _("Indicator Applet Website"),
700
g_free (license_i18n);
658
706
swap_orient_cb (GtkWidget *item, gpointer data)
660
GtkWidget *from = (GtkWidget *) data;
661
GtkWidget *to = (GtkWidget *) g_object_get_data(G_OBJECT(from), "to");
662
g_object_ref(G_OBJECT(item));
663
gtk_container_remove(GTK_CONTAINER(from), item);
664
if (GTK_IS_LABEL(item)) {
665
switch(packdirection) {
666
case GTK_PACK_DIRECTION_LTR:
667
gtk_label_set_angle(GTK_LABEL(item), 0.0);
669
case GTK_PACK_DIRECTION_TTB:
670
gtk_label_set_angle(GTK_LABEL(item),
671
(orient == PANEL_APPLET_ORIENT_LEFT) ?
678
gtk_box_pack_start(GTK_BOX(to), item, FALSE, FALSE, 0);
708
GtkWidget *from = (GtkWidget *) data;
709
GtkWidget *to = (GtkWidget *) g_object_get_data(G_OBJECT(from), "to");
710
g_object_ref(G_OBJECT(item));
711
gtk_container_remove(GTK_CONTAINER(from), item);
712
if (GTK_IS_LABEL(item)) {
713
switch(packdirection) {
714
case GTK_PACK_DIRECTION_LTR:
715
gtk_label_set_angle(GTK_LABEL(item), 0.0);
717
case GTK_PACK_DIRECTION_TTB:
718
gtk_label_set_angle(GTK_LABEL(item),
719
(orient == PANEL_APPLET_ORIENT_LEFT) ?
726
gtk_box_pack_start(GTK_BOX(to), item, FALSE, FALSE, 0);
683
731
reorient_box_cb (GtkWidget *menuitem, gpointer data)
685
GtkWidget *from = g_object_get_data(G_OBJECT(menuitem), "box");
686
GtkWidget *to = (packdirection == GTK_PACK_DIRECTION_LTR) ?
687
gtk_hbox_new(FALSE, 0) : gtk_vbox_new(FALSE, 0);
688
g_object_set_data(G_OBJECT(from), "to", to);
689
gtk_container_foreach(GTK_CONTAINER(from), (GtkCallback)swap_orient_cb,
691
gtk_container_remove(GTK_CONTAINER(menuitem), from);
692
gtk_container_add(GTK_CONTAINER(menuitem), to);
693
g_object_set_data(G_OBJECT(menuitem), "box", to);
694
gtk_widget_show_all(menuitem);
733
GtkWidget *from = g_object_get_data(G_OBJECT(menuitem), MENU_DATA_BOX);
734
GtkWidget *to = (packdirection == GTK_PACK_DIRECTION_LTR) ?
735
gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0) : gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
736
g_object_set_data(G_OBJECT(from), "to", to);
737
gtk_container_foreach(GTK_CONTAINER(from), (GtkCallback)swap_orient_cb,
739
gtk_container_remove(GTK_CONTAINER(menuitem), from);
740
gtk_container_add(GTK_CONTAINER(menuitem), to);
741
g_object_set_data(G_OBJECT(menuitem), MENU_DATA_BOX, to);
742
gtk_widget_show_all(menuitem);
699
747
panelapplet_reorient_cb (GtkWidget *applet, PanelAppletOrient neworient,
702
GtkWidget *menubar = (GtkWidget *)data;
703
if ((((neworient == PANEL_APPLET_ORIENT_UP) ||
704
(neworient == PANEL_APPLET_ORIENT_DOWN)) &&
705
((orient == PANEL_APPLET_ORIENT_LEFT) ||
706
(orient == PANEL_APPLET_ORIENT_RIGHT))) ||
707
(((neworient == PANEL_APPLET_ORIENT_LEFT) ||
708
(neworient == PANEL_APPLET_ORIENT_RIGHT)) &&
709
((orient == PANEL_APPLET_ORIENT_UP) ||
710
(orient == PANEL_APPLET_ORIENT_DOWN)))) {
711
packdirection = (packdirection == GTK_PACK_DIRECTION_LTR) ?
712
GTK_PACK_DIRECTION_TTB : GTK_PACK_DIRECTION_LTR;
713
gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar),
716
gtk_container_foreach(GTK_CONTAINER(menubar),
717
(GtkCallback)reorient_box_cb, NULL);
750
GtkWidget *menubar = (GtkWidget *)data;
751
if ((((neworient == PANEL_APPLET_ORIENT_UP) ||
752
(neworient == PANEL_APPLET_ORIENT_DOWN)) &&
753
((orient == PANEL_APPLET_ORIENT_LEFT) ||
754
(orient == PANEL_APPLET_ORIENT_RIGHT))) ||
755
(((neworient == PANEL_APPLET_ORIENT_LEFT) ||
756
(neworient == PANEL_APPLET_ORIENT_RIGHT)) &&
757
((orient == PANEL_APPLET_ORIENT_UP) ||
758
(orient == PANEL_APPLET_ORIENT_DOWN)))) {
759
packdirection = (packdirection == GTK_PACK_DIRECTION_LTR) ?
760
GTK_PACK_DIRECTION_TTB : GTK_PACK_DIRECTION_LTR;
761
gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar),
764
gtk_container_foreach(GTK_CONTAINER(menubar),
765
(GtkCallback)reorient_box_cb, NULL);
729
log_to_file_cb (GObject * source_obj G_GNUC_UNUSED,
730
GAsyncResult * result G_GNUC_UNUSED, gpointer user_data)
737
log_to_file (const gchar * domain G_GNUC_UNUSED,
738
GLogLevelFlags level G_GNUC_UNUSED,
777
log_to_file (const gchar * domain,
778
GLogLevelFlags level,
739
779
const gchar * message,
740
gpointer data G_GNUC_UNUSED)
742
if (log_file == NULL) {
743
GError * error = NULL;
744
gchar * filename = g_build_filename(g_get_user_cache_dir(), LOG_FILE_NAME, NULL);
745
GFile * file = g_file_new_for_path(filename);
748
if (!g_file_test(g_get_user_cache_dir(), G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
749
GFile * cachedir = g_file_new_for_path(g_get_user_cache_dir());
750
g_file_make_directory_with_parents(cachedir, NULL, &error);
753
g_error("Unable to make directory '%s' for log file: %s", g_get_user_cache_dir(), error->message);
758
g_file_delete(file, NULL, NULL);
760
GFileIOStream * io = g_file_create_readwrite(file,
761
G_FILE_CREATE_REPLACE_DESTINATION, /* flags */
762
NULL, /* cancelable */
765
g_error("Unable to replace file: %s", error->message);
769
log_file = g_io_stream_get_output_stream(G_IO_STREAM(io));
772
gchar * outputstring = g_strdup_printf("%s\n", message);
773
g_output_stream_write_async(log_file,
774
outputstring, /* data */
775
strlen(outputstring), /* length */
776
G_PRIORITY_LOW, /* priority */
777
NULL, /* cancelable */
778
log_to_file_cb, /* callback */
779
outputstring); /* data */
782
if (log_file == NULL) {
785
g_mkdir_with_parents(g_get_user_cache_dir(), 0755);
786
path = g_build_filename(g_get_user_cache_dir(), LOG_FILE_NAME, NULL);
788
log_file = fopen(path, "w");
796
switch(level & G_LOG_LEVEL_MASK) {
797
case G_LOG_LEVEL_ERROR:
800
case G_LOG_LEVEL_CRITICAL:
801
prefix = "CRITICAL:";
803
case G_LOG_LEVEL_WARNING:
806
case G_LOG_LEVEL_MESSAGE:
809
case G_LOG_LEVEL_INFO:
812
case G_LOG_LEVEL_DEBUG:
820
fprintf(log_file, "%s %s - %s\n", prefix, domain, message);
824
g_log_default_handler(domain, level, message, data);
785
830
applet_fill_cb (PanelApplet * applet, const gchar * iid G_GNUC_UNUSED,
786
831
gpointer data G_GNUC_UNUSED)
788
static const GtkActionEntry menu_actions[] = {
789
{"About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, G_CALLBACK(about_cb)}
791
static const gchar *menu_xml = "<menuitem name=\"About\" action=\"About\"/>";
793
static gboolean first_time = FALSE;
795
gint indicators_loaded = 0;
796
GtkActionGroup *action_group;
798
#ifdef INDICATOR_APPLET_SESSION
799
/* check if we are running stracciatella session */
800
if (g_strcmp0(g_getenv("GDMSESSION"), "gnome-stracciatella") == 0) {
801
g_debug("Running stracciatella GNOME session, disabling myself");
809
#ifdef INDICATOR_APPLET
810
g_set_application_name(_("Indicator Applet"));
812
#ifdef INDICATOR_APPLET_SESSION
813
g_set_application_name(_("Indicator Applet Session"));
815
#ifdef INDICATOR_APPLET_COMPLETE
816
g_set_application_name(_("Indicator Applet Complete"));
818
#ifdef INDICATOR_APPLET_APPMENU
819
g_set_application_name(_("Indicator Applet Application Menu"));
822
g_log_set_default_handler(log_to_file, NULL);
824
tomboy_keybinder_init();
827
/* Set panel options */
828
gtk_container_set_border_width(GTK_CONTAINER (applet), 0);
829
panel_applet_set_flags(applet, PANEL_APPLET_EXPAND_MINOR);
830
menubar = gtk_menu_bar_new();
831
action_group = gtk_action_group_new ("Indicator Applet Actions");
832
gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
833
gtk_action_group_add_actions (action_group, menu_actions,
834
G_N_ELEMENTS (menu_actions),
836
panel_applet_setup_menu(applet, menu_xml, action_group);
837
g_object_unref(action_group);
838
#ifdef INDICATOR_APPLET
839
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
842
#ifdef INDICATOR_APPLET_SESSION
843
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
844
"indicator-applet-session");
846
#ifdef INDICATOR_APPLET_COMPLETE
847
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
848
"indicator-applet-complete");
850
#ifdef INDICATOR_APPLET_APPMENU
851
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
852
"indicator-applet-appmenu");
855
/* Init some theme/icon stuff */
856
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(),
857
INDICATOR_ICONS_DIR);
858
/* g_debug("Icons directory: %s", INDICATOR_ICONS_DIR); */
859
gtk_rc_parse_string (
860
"style \"indicator-applet-style\"\n"
862
" GtkMenuBar::shadow-type = none\n"
863
" GtkMenuBar::internal-padding = 0\n"
864
" GtkWidget::focus-line-width = 0\n"
865
" GtkWidget::focus-padding = 0\n"
867
"style \"indicator-applet-menubar-style\"\n"
869
" GtkMenuBar::shadow-type = none\n"
870
" GtkMenuBar::internal-padding = 0\n"
871
" GtkWidget::focus-line-width = 0\n"
872
" GtkWidget::focus-padding = 0\n"
873
" GtkMenuItem::horizontal-padding = 0\n"
875
"style \"indicator-applet-menuitem-style\"\n"
877
" GtkWidget::focus-line-width = 0\n"
878
" GtkWidget::focus-padding = 0\n"
879
" GtkMenuItem::horizontal-padding = 0\n"
881
"widget \"*.fast-user-switch-applet\" style \"indicator-applet-style\""
882
"widget \"*.fast-user-switch-menuitem\" style \"indicator-applet-menuitem-style\""
883
"widget \"*.fast-user-switch-menubar\" style \"indicator-applet-menubar-style\"");
884
//gtk_widget_set_name(GTK_WIDGET (applet), "indicator-applet-menubar");
885
gtk_widget_set_name(GTK_WIDGET (applet), "fast-user-switch-applet");
888
orient = (panel_applet_get_orient(applet));
889
packdirection = ((orient == PANEL_APPLET_ORIENT_UP) ||
890
(orient == PANEL_APPLET_ORIENT_DOWN)) ?
891
GTK_PACK_DIRECTION_LTR : GTK_PACK_DIRECTION_TTB;
892
gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar),
894
GTK_WIDGET_SET_FLAGS (menubar, GTK_WIDGET_FLAGS(menubar) | GTK_CAN_FOCUS);
895
gtk_widget_set_name(GTK_WIDGET (menubar), "fast-user-switch-menubar");
896
g_signal_connect(menubar, "button-press-event", G_CALLBACK(menubar_press), NULL);
897
g_signal_connect_after(menubar, "expose-event", G_CALLBACK(menubar_on_expose), menubar);
898
g_signal_connect(applet, "change-orient",
899
G_CALLBACK(panelapplet_reorient_cb), menubar);
900
gtk_container_set_border_width(GTK_CONTAINER(menubar), 0);
902
/* Add in filter func */
903
tomboy_keybinder_bind(hotkey_keycode, hotkey_filter, menubar);
906
if (g_file_test(INDICATOR_DIR, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
907
GDir * dir = g_dir_open(INDICATOR_DIR, 0, NULL);
910
while ((name = g_dir_read_name(dir)) != NULL) {
911
#ifdef INDICATOR_APPLET_APPMENU
912
if (g_strcmp0(name, "libappmenu.so")) {
833
static const GtkActionEntry menu_actions[] = {
834
{"About", GTK_STOCK_ABOUT, N_("_About"), NULL, NULL, G_CALLBACK(about_cb)}
836
static const gchar *menu_xml = "<menuitem name=\"About\" action=\"About\"/>";
838
static gboolean first_time = FALSE;
840
gint indicators_loaded = 0;
841
GtkActionGroup *action_group;
842
GError *error = NULL;
844
#ifdef INDICATOR_APPLET_SESSION
845
/* check if we are running stracciatella session */
846
if (g_strcmp0(g_getenv("GDMSESSION"), "gnome-stracciatella") == 0) {
847
g_debug("Running stracciatella GNOME session, disabling myself");
855
#ifdef INDICATOR_APPLET
856
g_set_application_name(_("Indicator Applet"));
858
#ifdef INDICATOR_APPLET_SESSION
859
g_set_application_name(_("Indicator Applet Session"));
861
#ifdef INDICATOR_APPLET_COMPLETE
862
g_set_application_name(_("Indicator Applet Complete"));
864
#ifdef INDICATOR_APPLET_APPMENU
865
g_set_application_name(_("Indicator Applet Application Menu"));
868
g_log_set_default_handler(log_to_file, NULL);
870
tomboy_keybinder_init();
873
/* Set panel options */
874
gtk_container_set_border_width(GTK_CONTAINER (applet), 0);
875
panel_applet_set_flags(applet, PANEL_APPLET_EXPAND_MINOR);
876
menubar = gtk_menu_bar_new();
877
action_group = gtk_action_group_new ("Indicator Applet Actions");
878
gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
879
gtk_action_group_add_actions (action_group, menu_actions,
880
G_N_ELEMENTS (menu_actions),
882
panel_applet_setup_menu(applet, menu_xml, action_group);
883
g_object_unref(action_group);
884
#ifdef INDICATOR_APPLET
885
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
888
#ifdef INDICATOR_APPLET_SESSION
889
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
890
"indicator-applet-session");
892
#ifdef INDICATOR_APPLET_COMPLETE
893
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
894
"indicator-applet-complete");
896
#ifdef INDICATOR_APPLET_APPMENU
897
atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (applet)),
898
"indicator-applet-appmenu");
901
/* Init some theme/icon stuff */
902
gtk_icon_theme_append_search_path(gtk_icon_theme_get_default(),
903
INDICATOR_ICONS_DIR);
904
g_debug("Icons directory: %s", INDICATOR_ICONS_DIR);
906
gtk_widget_set_name(GTK_WIDGET (applet), "fast-user-switch-applet");
909
orient = (panel_applet_get_orient(applet));
910
packdirection = ((orient == PANEL_APPLET_ORIENT_UP) ||
911
(orient == PANEL_APPLET_ORIENT_DOWN)) ?
912
GTK_PACK_DIRECTION_LTR : GTK_PACK_DIRECTION_TTB;
913
gtk_menu_bar_set_pack_direction(GTK_MENU_BAR(menubar),
915
gtk_widget_set_can_focus (GTK_WIDGET (menubar), TRUE);
916
gtk_widget_set_name(GTK_WIDGET (menubar), "fast-user-switch-menubar");
917
g_signal_connect(menubar, "button-press-event", G_CALLBACK(menubar_press), NULL);
918
g_signal_connect(applet, "change-orient",
919
G_CALLBACK(panelapplet_reorient_cb), menubar);
920
gtk_container_set_border_width(GTK_CONTAINER(menubar), 0);
922
/* Add in filter func */
923
tomboy_keybinder_bind(hotkey_keycode, hotkey_filter, menubar);
926
if (g_file_test(INDICATOR_DIR, (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
927
GDir * dir = g_dir_open(INDICATOR_DIR, 0, NULL);
930
while ((name = g_dir_read_name(dir)) != NULL) {
931
#ifdef INDICATOR_APPLET_APPMENU
932
if (g_strcmp0(name, "libappmenu.so")) {
916
if (!g_strcmp0(name, "libappmenu.so")) {
936
if (!g_strcmp0(name, "libappmenu.so")) {
920
940
#ifdef INDICATOR_APPLET
921
if (!g_strcmp0(name, "libsession.so")) {
924
if (!g_strcmp0(name, "libme.so")) {
927
if (!g_strcmp0(name, "libdatetime.so")) {
941
if (!g_strcmp0(name, "libsession.so")) {
944
if (!g_strcmp0(name, "libme.so")) {
947
if (!g_strcmp0(name, "libdatetime.so")) {
931
951
#ifdef INDICATOR_APPLET_SESSION
932
if (g_strcmp0(name, "libsession.so") && g_strcmp0(name, "libme.so")) {
952
if (g_strcmp0(name, "libsession.so") && g_strcmp0(name, "libme.so")) {
936
if (load_module(name, menubar)) {
943
if (indicators_loaded == 0) {
944
/* A label to allow for click through */
945
GtkWidget * item = gtk_label_new(_("No Indicators"));
946
gtk_container_add(GTK_CONTAINER(applet), item);
947
gtk_widget_show(item);
949
gtk_container_add(GTK_CONTAINER(applet), menubar);
950
panel_applet_set_background_widget(applet, menubar);
951
gtk_widget_show(menubar);
954
/* Background of applet */
955
g_signal_connect(applet, "change-background",
956
G_CALLBACK(cw_panel_background_changed), menubar);
958
gtk_widget_show(GTK_WIDGET(applet));
965
cw_panel_background_changed (PanelApplet *applet,
966
PanelAppletBackgroundType type,
971
GtkRcStyle *rc_style;
975
gtk_widget_set_style(GTK_WIDGET (applet), NULL);
976
gtk_widget_set_style(menubar, NULL);
977
rc_style = gtk_rc_style_new ();
978
gtk_widget_modify_style(GTK_WIDGET (applet), rc_style);
979
gtk_widget_modify_style(menubar, rc_style);
980
gtk_rc_style_unref(rc_style);
984
case PANEL_NO_BACKGROUND:
986
case PANEL_COLOR_BACKGROUND:
987
gtk_widget_modify_bg(GTK_WIDGET (applet), GTK_STATE_NORMAL, colour);
988
gtk_widget_modify_bg(menubar, GTK_STATE_NORMAL, colour);
991
case PANEL_PIXMAP_BACKGROUND:
992
style = gtk_style_copy(GTK_WIDGET (applet)->style);
993
if (style->bg_pixmap[GTK_STATE_NORMAL])
994
g_object_unref(style->bg_pixmap[GTK_STATE_NORMAL]);
995
style->bg_pixmap[GTK_STATE_NORMAL] = g_object_ref (pixmap);
996
gtk_widget_set_style(GTK_WIDGET (applet), style);
997
gtk_widget_set_style(GTK_WIDGET (menubar), style);
998
g_object_unref(style);
956
if (load_module(name, menubar)) {
963
if (indicators_loaded == 0) {
964
/* A label to allow for click through */
965
GtkWidget * item = gtk_label_new(_("No Indicators"));
966
gtk_container_add(GTK_CONTAINER(applet), item);
967
gtk_widget_show(item);
969
gtk_container_add(GTK_CONTAINER(applet), menubar);
970
panel_applet_set_background_widget(applet, menubar);
971
gtk_widget_show(menubar);
974
gtk_widget_show(GTK_WIDGET(applet));