48
48
const gchar *dbus_name;
49
49
const gchar *dbus_menu_path;
50
const gchar *action_path; /* Only if gmenumodel */
50
51
const gchar *indicator_name;
51
52
const gchar *user_visible_name;
54
const gchar *dbus_path;
53
55
gboolean uses_gmenumodel;
58
#define HUD_PATH_BASE "/com/canonical/hud/indicator/"
56
60
static const IndicatorInfo indicator_info[] = {
58
62
.dbus_name = "com.canonical.indicator.datetime",
59
63
.dbus_menu_path = "/com/canonical/indicator/datetime/menu",
64
.dbus_path = HUD_PATH_BASE "datetime",
60
65
.indicator_name = "indicator-datetime",
61
66
.user_visible_name = N_("Date"),
62
67
.icon = "office-calendar"
65
70
.dbus_name = "com.canonical.indicator.session",
66
71
.dbus_menu_path = "/com/canonical/indicator/session/menu",
72
.dbus_path = HUD_PATH_BASE "session",
67
73
.indicator_name = "indicator-session-device",
68
74
.user_visible_name = N_("Device"),
69
75
.icon = "system-devices-panel"
72
.dbus_name = "com.canonical.indicator.session",
73
.dbus_menu_path = "/com/canonical/indicator/users/menu",
74
.indicator_name = "indicator-session-user",
75
.user_visible_name = N_("Users"),
76
.icon = "avatar-default"
79
78
.dbus_name = "com.canonical.indicator.sound",
80
79
.dbus_menu_path = "/com/canonical/indicator/sound/menu",
80
.dbus_path = HUD_PATH_BASE "sound",
81
81
.indicator_name = "indicator-sound",
82
82
.user_visible_name = N_("Sound"),
83
.icon = "audio-volume-high-panel"
83
.icon = "indicator-sound-hud"
86
86
.dbus_name = "com.canonical.indicator.messages",
87
87
.dbus_menu_path = "/com/canonical/indicator/messages/menu",
88
.action_path = "/com/canonical/indicator/messages/menu",
89
.dbus_path = HUD_PATH_BASE "messages",
88
90
.indicator_name = "indicator-messages",
89
91
.user_visible_name = N_("Messages"),
90
.icon = "indicator-messages",
92
.icon = "indicator-messages-hud",
93
.uses_gmenumodel = TRUE
96
.dbus_name = "com.canonical.indicator.messages",
97
.dbus_menu_path = "/com/canonical/indicator/messages/phone",
98
.action_path = "/com/canonical/indicator/messages",
99
.dbus_path = HUD_PATH_BASE "messages_phone",
100
.indicator_name = "indicator-messages-phone",
101
.user_visible_name = N_("Messages"),
102
.icon = "indicator-messages-hud",
103
.uses_gmenumodel = TRUE
106
.dbus_name = "com.canonical.indicator.battery",
107
.dbus_menu_path = "/com/canonical/indicator/battery/phone",
108
.action_path = "/com/canonical/indicator/battery",
109
.dbus_path = HUD_PATH_BASE "battery",
110
.indicator_name = "indicator-battery-phone",
111
.user_visible_name = N_("Battery"),
112
.icon = "indicator-battery-hud",
113
.uses_gmenumodel = TRUE
116
.dbus_name = "com.canonical.indicator.time",
117
.dbus_menu_path = "/com/canonical/indicator/time/phone",
118
.action_path = "/com/canonical/indicator/time",
119
.dbus_path = HUD_PATH_BASE "time",
120
.indicator_name = "indicator-time-phone",
121
.user_visible_name = N_("Date and Time"),
122
.icon = "indicator-time",
123
.uses_gmenumodel = TRUE
126
.dbus_name = "com.canonical.settings.network",
127
.dbus_menu_path = "/com/canonical/settings/network/phone",
128
.action_path = "/com/canonical/settings/network",
129
.dbus_path = HUD_PATH_BASE "network",
130
.indicator_name = "indicator-network-phone",
131
.user_visible_name = N_("Network"),
132
.icon = "indicator-network-hud",
133
.uses_gmenumodel = TRUE
136
.dbus_name = "com.canonical.settings.sound",
137
.dbus_menu_path = "/com/canonical/settings/sound/phone",
138
.action_path = "/com/canonical/settings/sound",
139
.dbus_path = HUD_PATH_BASE "sound",
140
.indicator_name = "indicator-sound-phone",
141
.user_visible_name = N_("Sound"),
142
.icon = "indicator-sound-hud",
91
143
.uses_gmenumodel = TRUE
152
205
hud_indicator_source_search (HudSource *hud_source,
153
GPtrArray *results_array,
154
HudTokenList *search_string)
156
HudIndicatorSource *source = HUD_INDICATOR_SOURCE (hud_source);
159
for (i = 0; i < source->n_indicators; i++)
160
if (source->indicators[i].collector)
161
hud_source_search (source->indicators[i].collector, results_array, search_string);
206
HudTokenList *search_string,
207
void (*append_func) (HudResult * result, gpointer user_data),
210
HudIndicatorSource *source = HUD_INDICATOR_SOURCE (hud_source);
213
for (i = 0; i < source->n_indicators; i++)
214
if (source->indicators[i].collector)
215
hud_source_search (source->indicators[i].collector, search_string, append_func, user_data);
219
hud_indicator_source_list_applications (HudSource *hud_source,
220
HudTokenList *search_string,
221
void (*append_func) (const gchar *application_id, const gchar *application_icon, HudSourceItemType type, gpointer user_data),
224
HudIndicatorSource *source = HUD_INDICATOR_SOURCE (hud_source);
227
for (i = 0; i < source->n_indicators; i++)
228
if (source->indicators[i].collector)
229
hud_source_list_applications (source->indicators[i].collector, search_string, append_func, user_data);
233
hud_indicator_source_get (HudSource *hud_source,
234
const gchar *application_id)
236
HudIndicatorSource *source = HUD_INDICATOR_SOURCE (hud_source);
239
for (i = 0; i < source->n_indicators; i++)
240
if (source->indicators[i].collector) {
241
HudSource *result = hud_source_get (source->indicators[i].collector, application_id);
165
250
hud_indicator_source_finalize (GObject *object)
253
HudIndicatorSource *source = HUD_INDICATOR_SOURCE(object);
255
for (i = 0; i < source->n_indicators; i++)
257
HudIndicatorSourceIndicator *indicator = &source->indicators[i];
258
if (indicator->collector)
260
g_object_unref(indicator->collector);
262
g_bus_unwatch_name(indicator->watch_id);
265
g_free (source->indicators);
168
267
G_OBJECT_CLASS(hud_indicator_source_parent_class)->finalize(object);
189
287
if (indicator->info->uses_gmenumodel)
191
HudMenuModelCollector *collector;
289
HudMenuModelCollector *collector = hud_menu_model_collector_new(indicator->info->indicator_name, indicator->info->icon, hud_settings.indicator_penalty, indicator->info->dbus_path, HUD_SOURCE_ITEM_TYPE_INDICATOR);
193
collector = hud_menu_model_collector_new_for_endpoint (indicator->info->indicator_name,
194
_(indicator->info->user_visible_name),
195
indicator->info->icon,
196
hud_settings.indicator_penalty,
198
indicator->info->dbus_menu_path);
291
hud_menu_model_collector_add_endpoint (collector,
292
_(indicator->info->user_visible_name),
294
indicator->info->dbus_menu_path,
295
indicator->info->action_path);
200
297
indicator->collector = HUD_SOURCE (collector);
204
301
HudDbusmenuCollector *collector;
206
collector = hud_dbusmenu_collector_new_for_endpoint (indicator->info->indicator_name,
207
_(indicator->info->user_visible_name),
208
indicator->info->icon,
209
hud_settings.indicator_penalty,
210
name_owner, indicator->info->dbus_menu_path);
211
indicator->collector = HUD_SOURCE (collector);
214
g_signal_connect (indicator->collector, "changed",
215
G_CALLBACK (hud_indicator_source_collector_changed), indicator);
217
/* Set initial use count on new indicator if query is active. */
218
if (indicator->source->use_count)
219
hud_source_use (indicator->collector);
221
hud_source_changed (HUD_SOURCE (indicator->source));
303
GError *error = NULL;
304
if (!g_dbus_connection_call_sync (connection, name_owner,
305
indicator->info->dbus_menu_path, "com.canonical.dbusmenu", "GetLayout",
306
g_variant_new ("(iias)", 0, 1, NULL ), NULL, G_DBUS_CALL_FLAGS_NONE, -1,
309
g_error_free (error);
313
collector = hud_dbusmenu_collector_new_for_endpoint (indicator->info->indicator_name,
314
_(indicator->info->user_visible_name),
315
indicator->info->icon,
316
hud_settings.indicator_penalty,
317
name_owner, indicator->info->dbus_menu_path,
318
HUD_SOURCE_ITEM_TYPE_INDICATOR);
319
indicator->collector = HUD_SOURCE (collector);
323
if (indicator->collector)
325
g_signal_connect (indicator->collector, "changed",
326
G_CALLBACK (hud_indicator_source_collector_changed), indicator);
328
/* Set initial use count on new indicator if query is active. */
329
if (indicator->source->use_count)
330
hud_source_use (indicator->collector);
332
hud_source_changed (HUD_SOURCE (indicator->source));
282
383
* Returns: a new #HudIndicatorSource
284
385
HudIndicatorSource *
285
hud_indicator_source_new (void)
386
hud_indicator_source_new (GDBusConnection *connection)
287
return g_object_new (HUD_TYPE_INDICATOR_SOURCE, NULL);
389
HudIndicatorSource *source = g_object_new (HUD_TYPE_INDICATOR_SOURCE, NULL );
391
for (i = 0; i < source->n_indicators; i++)
393
HudIndicatorSourceIndicator *indicator = &source->indicators[i];
395
indicator->info = &indicator_info[i];
396
indicator->source = source;
398
indicator->watch_id = g_bus_watch_name_on_connection (connection,
399
indicator->info->dbus_name, G_BUS_NAME_WATCHER_FLAGS_NONE,
400
hud_indicator_source_name_appeared, hud_indicator_source_name_vanished,