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,
PanelPosition position)
{
char const * section;
gint i;
const gint cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
GtkTreeModel * model;
@ -1102,11 +1103,12 @@ static void _preferences_on_response_apply_panel(Panel * panel,
String * value;
String * sep;
section = _panel_get_section(panel, position);
i = gtk_combo_box_get_active(
GTK_COMBO_BOX(panel->pr_panels[position].size));
if(i >= 0 && i <= cnt)
/* FIXME "top" is wrong */
config_set(panel->config, "top", "size", (i > 0)
/* XXX may fail */
config_set(panel->config, section, "size", (i > 0)
? _panel_sizes[i - 1].name : NULL);
model = GTK_TREE_MODEL(panel->pr_panels[position].store);
value = NULL;
@ -1120,15 +1122,14 @@ static void _preferences_on_response_apply_panel(Panel * panel,
sep = ",";
g_free(p);
}
/* FIXME "top" is wrong */
config_set(panel->config, "top", "applets", value);
/* XXX may fail */
config_set(panel->config, section, "applets", value);
string_delete(value);
}
static void _preferences_on_response_cancel(gpointer data)
{
Panel * panel = data;
char const * p;
size_t i;
size_t cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
GtkWidget * widget;
@ -1140,32 +1141,6 @@ static void _preferences_on_response_cancel(gpointer data)
_cancel_general(panel);
/* applets */
_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 */
cnt = gtk_notebook_get_n_pages(GTK_NOTEBOOK(panel->pr_notebook));
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)
{
DIR * dir;
@ -1206,12 +1166,14 @@ static void _cancel_applets(Panel * panel)
char const ext[] = ".so";
#endif
size_t len;
char const * section;
char const * p;
char * q;
char const * r;
gboolean enabled;
char c;
size_t i;
size_t j;
const size_t cnt = sizeof(_panel_sizes) / sizeof(*_panel_sizes);
gtk_list_store_clear(panel->pr_store);
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);
j++)
{
r = _panel_get_section(panel, j);
enabled = ((r = panel_get_config(panel, r, "enabled")) != NULL
&& strtol(r, NULL, 0) != 0) ? TRUE : FALSE;
section = _panel_get_section(panel, j);
/* enabled */
enabled = ((p = panel_get_config(panel, section, "enabled"))
!= NULL
&& strtol(p, NULL, 0) != 0) ? TRUE : FALSE;
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
panel->pr_panels[j].enabled), enabled);
r = _panel_get_applets(panel, j);
q = (r != NULL) ? strdup(r) : NULL;
for(i = 0, r = q; q != NULL; i++)
/* applets */
p = _panel_get_applets(panel, j);
q = (p != NULL) ? strdup(p) : NULL;
for(i = 0, p = q; q != NULL; i++)
{
if(q[i] != '\0' && q[i] != ',')
continue;
c = q[i];
q[i] = '\0';
_preferences_window_applets_add(
panel->pr_panels[j].store, r);
panel->pr_panels[j].store, p);
if(c == '\0')
break;
r = &q[i + 1];
p = &q[i + 1];
}
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)
{
Panel * panel = data;