59
61
static void rb_source_header_search_activate_cb (RBSearchEntry *search,
60
62
RBSourceHeader *header);
61
static void rb_source_header_gconf_disclosure_changed_cb (GConfClient *client,
64
RBSourceHeader *header);
65
63
static void rb_source_header_view_browser_changed_cb (GtkAction *action,
66
64
RBSourceHeader *header);
67
65
static void rb_source_header_source_weak_destroy_cb (RBSourceHeader *header, RBSource *source);
135
139
GtkWidget *align;
136
140
GtkEventBox *ebox;
137
header->priv = g_new0 (RBSourceHeaderPrivate, 1);
142
header->priv = RB_SOURCE_HEADER_GET_PRIVATE (header);
139
144
header->priv->tooltips = gtk_tooltips_new ();
140
145
gtk_tooltips_enable (header->priv->tooltips);
220
223
case PROP_SOURCE:
221
224
if (header->priv->selected_source != NULL)
223
if (header->priv->browser_key)
224
eel_gconf_notification_remove (header->priv->browser_notify_id);
225
226
g_signal_handlers_disconnect_by_func (G_OBJECT (header->priv->selected_source),
226
227
G_CALLBACK (rb_source_header_filter_changed_cb),
230
231
header->priv->selected_source = g_value_get_object (value);
231
232
rb_debug ("selected source %p", g_value_get_object (value));
233
if (header->priv->selected_source != NULL)
234
if (header->priv->selected_source != NULL) {
235
235
const char *text = g_hash_table_lookup (header->priv->source_search_text,
236
236
header->priv->selected_source);
238
238
header->priv->browser_key = rb_source_get_browser_key (header->priv->selected_source);
239
if (header->priv->browser_key)
240
header->priv->browser_notify_id
241
= eel_gconf_notification_add (header->priv->browser_key,
242
(GConfClientNotifyFunc) rb_source_header_gconf_disclosure_changed_cb,
244
240
rb_search_entry_set_text (RB_SEARCH_ENTRY (header->priv->search), text);
245
241
g_signal_connect_object (G_OBJECT (header->priv->selected_source),
246
242
"filter_changed",
247
243
G_CALLBACK (rb_source_header_filter_changed_cb),
249
246
gtk_widget_set_sensitive (GTK_WIDGET (header->priv->search),
250
247
rb_source_can_search (header->priv->selected_source));
251
248
header->priv->have_search = rb_source_can_search (header->priv->selected_source);
252
if (!header->priv->browser_key && !header->priv->have_search)
249
header->priv->have_browser = rb_source_can_browse (header->priv->selected_source);
250
if (!header->priv->have_browser)
251
header->priv->disclosed = FALSE;
252
else if (header->priv->browser_key)
253
header->priv->disclosed = eel_gconf_get_boolean (header->priv->browser_key);
255
/* FIXME: remember the previous state of the source*/
256
header->priv->disclosed = FALSE;
258
if (!header->priv->have_browser && !header->priv->have_search)
253
259
gtk_widget_hide (GTK_WIDGET (header));
255
261
gtk_widget_show (GTK_WIDGET (header));
257
263
rb_source_header_sync_control_state (header);
260
265
case PROP_ACTION_GROUP:
261
266
header->priv->actiongroup = g_value_get_object (value);
378
383
RBSourceHeader *header = RB_SOURCE_HEADER (data);
379
384
GtkExpander *expander = GTK_EXPANDER (object);
380
gboolean disclosed = gtk_expander_get_expanded (expander);
382
rb_debug ("disclosed: %s", disclosed ? "TRUE" : "FALSE");
384
if (header->priv->selected_source != NULL)
385
eel_gconf_set_boolean (header->priv->browser_key, disclosed);
389
rb_source_header_gconf_disclosure_changed_cb (GConfClient *client,
392
RBSourceHeader *header)
394
rb_debug ("gconf disclosure changed");
396
g_return_if_fail (header->priv->browser_key != NULL);
386
header->priv->disclosed = gtk_expander_get_expanded (expander);
388
if (header->priv->browser_key)
389
eel_gconf_set_boolean (header->priv->browser_key,
390
header->priv->disclosed);
398
392
rb_source_header_sync_control_state (header);
403
397
RBSourceHeader *header)
405
399
rb_debug ("got view browser toggle");
406
eel_gconf_set_boolean (header->priv->browser_key,
407
gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
400
gtk_expander_set_expanded (GTK_EXPANDER (header->priv->disclosure),
401
gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action)));
413
407
GtkAction *viewbrowser_action;
414
408
GtkAction *viewstatusbar_action;
415
409
GtkAction *viewall_action;
416
gboolean have_browser = header->priv->selected_source != NULL
417
&& header->priv->browser_key != NULL;
418
410
gboolean not_small = !eel_gconf_get_boolean (CONF_UI_SMALL_DISPLAY);
420
412
gtk_widget_set_sensitive (header->priv->disclosure,
413
header->priv->have_browser);
422
414
viewbrowser_action = gtk_action_group_get_action (header->priv->actiongroup,
424
416
g_object_set (G_OBJECT (viewbrowser_action), "sensitive",
425
have_browser && not_small, NULL);
417
header->priv->have_browser && not_small, NULL);
426
418
viewstatusbar_action = gtk_action_group_get_action (header->priv->actiongroup,
427
419
"ViewStatusbar");
428
420
g_object_set (G_OBJECT (viewstatusbar_action), "sensitive",
430
422
viewall_action = gtk_action_group_get_action (header->priv->actiongroup,
432
424
g_object_set (G_OBJECT (viewall_action), "sensitive",
433
have_browser && not_small, NULL);
435
gboolean shown = eel_gconf_get_boolean (header->priv->browser_key);
436
gtk_expander_set_expanded (GTK_EXPANDER (header->priv->disclosure),
438
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (viewbrowser_action),
425
header->priv->have_browser && not_small, NULL);
427
gtk_expander_set_expanded (GTK_EXPANDER (header->priv->disclosure),
428
header->priv->disclosed);
429
gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (viewbrowser_action),
430
header->priv->disclosed);