Improved handling of preferences for additional panels some more

This commit is contained in:
Pierre Pronchery 2014-06-30 01:24:23 +02:00
parent ef5d3ac225
commit df33d53a02

View File

@ -1093,6 +1093,7 @@ static void _preferences_on_response_apply(gpointer data)
static void _preferences_on_response_apply_panel(Panel * panel, static void _preferences_on_response_apply_panel(Panel * panel,
PanelPosition position) PanelPosition position)
{ {
char const * section;
gint i; gint i;
const gint cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes); const gint cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
GtkTreeModel * model; GtkTreeModel * model;
@ -1102,11 +1103,12 @@ static void _preferences_on_response_apply_panel(Panel * panel,
String * value; String * value;
String * sep; String * sep;
section = _panel_get_section(panel, position);
i = gtk_combo_box_get_active( i = gtk_combo_box_get_active(
GTK_COMBO_BOX(panel->pr_panels[position].size)); GTK_COMBO_BOX(panel->pr_panels[position].size));
if(i >= 0 && i <= cnt) if(i >= 0 && i <= cnt)
/* FIXME "top" is wrong */ /* XXX may fail */
config_set(panel->config, "top", "size", (i > 0) config_set(panel->config, section, "size", (i > 0)
? _panel_sizes[i - 1].name : NULL); ? _panel_sizes[i - 1].name : NULL);
model = GTK_TREE_MODEL(panel->pr_panels[position].store); model = GTK_TREE_MODEL(panel->pr_panels[position].store);
value = NULL; value = NULL;
@ -1120,15 +1122,14 @@ static void _preferences_on_response_apply_panel(Panel * panel,
sep = ","; sep = ",";
g_free(p); g_free(p);
} }
/* FIXME "top" is wrong */ /* XXX may fail */
config_set(panel->config, "top", "applets", value); config_set(panel->config, section, "applets", value);
string_delete(value); string_delete(value);
} }
static void _preferences_on_response_cancel(gpointer data) static void _preferences_on_response_cancel(gpointer data)
{ {
Panel * panel = data; Panel * panel = data;
char const * p;
size_t i; size_t i;
size_t cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes); size_t cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
GtkWidget * widget; GtkWidget * widget;
@ -1140,32 +1141,6 @@ static void _preferences_on_response_cancel(gpointer data)
_cancel_general(panel); _cancel_general(panel);
/* applets */ /* applets */
_cancel_applets(panel); _cancel_applets(panel);
/* FIXME handle all panels */
if((p = panel_get_config(panel, "bottom", "size")) == NULL
&& (p = panel_get_config(panel, NULL, "size")) == NULL)
gtk_combo_box_set_active(GTK_COMBO_BOX(panel->pr_panels[PANEL_POSITION_BOTTOM].size),
0);
else
for(i = 0; i < cnt; i++)
{
if(strcmp(p, _panel_sizes[i].name) != 0)
continue;
gtk_combo_box_set_active(GTK_COMBO_BOX(
panel->pr_panels[PANEL_POSITION_BOTTOM].size), i + 1);
break;
}
if((p = panel_get_config(panel, "top", "size")) == NULL
&& (p = panel_get_config(panel, NULL, "size")) == NULL)
gtk_combo_box_set_active(GTK_COMBO_BOX(panel->pr_panels[PANEL_POSITION_TOP].size), 0);
else
for(i = 0; i < cnt; i++)
{
if(strcmp(p, _panel_sizes[i].name) != 0)
continue;
gtk_combo_box_set_active(GTK_COMBO_BOX(
panel->pr_panels[PANEL_POSITION_TOP].size), i + 1);
break;
}
/* XXX applets should be known from Panel already */ /* XXX applets should be known from Panel already */
cnt = gtk_notebook_get_n_pages(GTK_NOTEBOOK(panel->pr_notebook)); cnt = gtk_notebook_get_n_pages(GTK_NOTEBOOK(panel->pr_notebook));
for(i = 1; i < cnt; i++) for(i = 1; i < cnt; i++)
@ -1181,21 +1156,6 @@ static void _preferences_on_response_cancel(gpointer data)
} }
} }
static void _cancel_general(Panel * panel)
{
char const * p;
gboolean b;
b = ((p = panel_get_config(panel, NULL, "accept_focus")) == NULL
|| strcmp(p, "1") == 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(panel->pr_accept_focus),
b);
b = ((p = panel_get_config(panel, NULL, "keep_above")) == NULL
|| strcmp(p, "1") == 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(panel->pr_keep_above),
b);
}
static void _cancel_applets(Panel * panel) static void _cancel_applets(Panel * panel)
{ {
DIR * dir; DIR * dir;
@ -1206,12 +1166,14 @@ static void _cancel_applets(Panel * panel)
char const ext[] = ".so"; char const ext[] = ".so";
#endif #endif
size_t len; size_t len;
char const * section;
char const * p;
char * q; char * q;
char const * r;
gboolean enabled; gboolean enabled;
char c; char c;
size_t i; size_t i;
size_t j; size_t j;
const size_t cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
gtk_list_store_clear(panel->pr_store); gtk_list_store_clear(panel->pr_store);
for(j = 0; j < sizeof(panel->pr_panels) / sizeof(*panel->pr_panels); for(j = 0; j < sizeof(panel->pr_panels) / sizeof(*panel->pr_panels);
@ -1237,29 +1199,63 @@ static void _cancel_applets(Panel * panel)
for(j = 0; j < sizeof(panel->pr_panels) / sizeof(*panel->pr_panels); for(j = 0; j < sizeof(panel->pr_panels) / sizeof(*panel->pr_panels);
j++) j++)
{ {
r = _panel_get_section(panel, j); section = _panel_get_section(panel, j);
enabled = ((r = panel_get_config(panel, r, "enabled")) != NULL /* enabled */
&& strtol(r, NULL, 0) != 0) ? TRUE : FALSE; enabled = ((p = panel_get_config(panel, section, "enabled"))
!= NULL
&& strtol(p, NULL, 0) != 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON( gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
panel->pr_panels[j].enabled), enabled); panel->pr_panels[j].enabled), enabled);
r = _panel_get_applets(panel, j); /* applets */
q = (r != NULL) ? strdup(r) : NULL; p = _panel_get_applets(panel, j);
for(i = 0, r = q; q != NULL; i++) q = (p != NULL) ? strdup(p) : NULL;
for(i = 0, p = q; q != NULL; i++)
{ {
if(q[i] != '\0' && q[i] != ',') if(q[i] != '\0' && q[i] != ',')
continue; continue;
c = q[i]; c = q[i];
q[i] = '\0'; q[i] = '\0';
_preferences_window_applets_add( _preferences_window_applets_add(
panel->pr_panels[j].store, r); panel->pr_panels[j].store, p);
if(c == '\0') if(c == '\0')
break; break;
r = &q[i + 1]; p = &q[i + 1];
} }
free(q); free(q);
/* size */
if((p = panel_get_config(panel, section, "size")) == NULL
&& (p = panel_get_config(panel, NULL, "size"))
== NULL)
gtk_combo_box_set_active(GTK_COMBO_BOX(
panel->pr_panels[j].size), 0);
else
for(i = 0; i < cnt; i++)
{
if(strcmp(p, _panel_sizes[i].name) != 0)
continue;
gtk_combo_box_set_active(GTK_COMBO_BOX(
panel->pr_panels[j].size),
i + 1);
break;
}
} }
} }
static void _cancel_general(Panel * panel)
{
char const * p;
gboolean b;
b = ((p = panel_get_config(panel, NULL, "accept_focus")) == NULL
|| strcmp(p, "1") == 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(panel->pr_accept_focus),
b);
b = ((p = panel_get_config(panel, NULL, "keep_above")) == NULL
|| strcmp(p, "1") == 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(panel->pr_keep_above),
b);
}
static void _preferences_on_panel_toggled(gpointer data) static void _preferences_on_panel_toggled(gpointer data)
{ {
Panel * panel = data; Panel * panel = data;