mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-24 21:16:50 +03:00
toolbar customisation can now apply chnages
This commit is contained in:
parent
db558f862b
commit
7b63f36a4f
@ -1095,70 +1095,8 @@ static void nsgtk_toolbar_cast(struct nsgtk_scaffolding *g)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* save toolbar settings to file
|
|
||||||
*/
|
|
||||||
static nserror nsgtk_toolbar_customisation_save(struct nsgtk_scaffolding *g)
|
|
||||||
{
|
|
||||||
char *choices = NULL;
|
|
||||||
char *order;
|
|
||||||
int order_len = PLACEHOLDER_BUTTON * 12; /* length of order buffer */
|
|
||||||
int tbidx;
|
|
||||||
char *cur;
|
|
||||||
int plen;
|
|
||||||
|
|
||||||
order = malloc(order_len);
|
|
||||||
|
|
||||||
if (order == NULL) {
|
|
||||||
return NSERROR_NOMEM;
|
|
||||||
}
|
|
||||||
cur = order;
|
|
||||||
|
|
||||||
for (tbidx = BACK_BUTTON; tbidx < PLACEHOLDER_BUTTON; tbidx++) {
|
|
||||||
plen = snprintf(cur,
|
|
||||||
order_len,
|
|
||||||
"%d;%d|",
|
|
||||||
tbidx,
|
|
||||||
nsgtk_scaffolding_button(g, tbidx)->location);
|
|
||||||
if (plen == order_len) {
|
|
||||||
/* ran out of space, bail early */
|
|
||||||
NSLOG(netsurf, INFO,
|
|
||||||
"toolbar ordering exceeded available space");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
cur += plen;
|
|
||||||
order_len -= plen;
|
|
||||||
}
|
|
||||||
|
|
||||||
nsoption_set_charp(toolbar_order, order);
|
|
||||||
|
|
||||||
/* ensure choices are saved */
|
|
||||||
netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
|
|
||||||
if (choices != NULL) {
|
|
||||||
nsoption_write(choices, NULL, NULL);
|
|
||||||
free(choices);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NSERROR_OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* when 'save settings' button is clicked
|
|
||||||
*/
|
|
||||||
static gboolean nsgtk_toolbar_persist(GtkWidget *widget, gpointer data)
|
|
||||||
{
|
|
||||||
struct nsgtk_scaffolding *g = (struct nsgtk_scaffolding *)data;
|
|
||||||
|
|
||||||
edit_mode = false;
|
|
||||||
/* save state to file, update toolbars for all windows */
|
|
||||||
nsgtk_toolbar_customisation_save(g);
|
|
||||||
nsgtk_toolbar_cast(g);
|
|
||||||
nsgtk_toolbar_set_physical(g);
|
|
||||||
nsgtk_toolbar_close(g);
|
|
||||||
gtk_widget_destroy(window->window);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* when 'reload defaults' button is clicked
|
* when 'reload defaults' button is clicked
|
||||||
@ -1401,6 +1339,77 @@ void nsgtk_toolbar_customisation_init(struct nsgtk_scaffolding *g)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* save toolbar settings to file
|
||||||
|
*/
|
||||||
|
static nserror
|
||||||
|
nsgtk_toolbar_customisation_save(struct nsgtk_toolbar_customisation *tbc)
|
||||||
|
{
|
||||||
|
char *choices = NULL;
|
||||||
|
char *order;
|
||||||
|
int order_len;
|
||||||
|
int tbidx;
|
||||||
|
char *cur;
|
||||||
|
int plen;
|
||||||
|
|
||||||
|
order_len = PLACEHOLDER_BUTTON * 12; /* length of order buffer */
|
||||||
|
order = malloc(order_len);
|
||||||
|
|
||||||
|
if (order == NULL) {
|
||||||
|
return NSERROR_NOMEM;
|
||||||
|
}
|
||||||
|
cur = order;
|
||||||
|
|
||||||
|
for (tbidx = BACK_BUTTON; tbidx < PLACEHOLDER_BUTTON; tbidx++) {
|
||||||
|
plen = snprintf(cur,
|
||||||
|
order_len,
|
||||||
|
"%d;%d|",
|
||||||
|
tbidx,
|
||||||
|
tbc->toolbar.buttons[tbidx]->location);
|
||||||
|
if (plen == order_len) {
|
||||||
|
/* ran out of space, bail early */
|
||||||
|
NSLOG(netsurf, INFO,
|
||||||
|
"toolbar ordering exceeded available space");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
cur += plen;
|
||||||
|
order_len -= plen;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsoption_set_charp(toolbar_order, order);
|
||||||
|
|
||||||
|
/* ensure choices are saved */
|
||||||
|
netsurf_mkpath(&choices, NULL, 2, nsgtk_config_home, "Choices");
|
||||||
|
if (choices != NULL) {
|
||||||
|
nsoption_write(choices, NULL, NULL);
|
||||||
|
free(choices);
|
||||||
|
}
|
||||||
|
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* customisation apply handler for clicked signal
|
||||||
|
*
|
||||||
|
* when 'save settings' button is clicked
|
||||||
|
*/
|
||||||
|
static gboolean
|
||||||
|
customisation_apply_clicked_cb(GtkWidget *widget, gpointer data)
|
||||||
|
{
|
||||||
|
struct nsgtk_toolbar_customisation *tbc;
|
||||||
|
tbc = (struct nsgtk_toolbar_customisation *)data;
|
||||||
|
|
||||||
|
/* save state to file, update toolbars for all windows */
|
||||||
|
nsgtk_toolbar_customisation_save(tbc);
|
||||||
|
nsgtk_window_toolbar_update();
|
||||||
|
gtk_widget_destroy(tbc->container);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* find the toolbar item with a given location.
|
* find the toolbar item with a given location.
|
||||||
*
|
*
|
||||||
@ -1654,7 +1663,7 @@ static void
|
|||||||
customisation_toolbar_drag_leave_cb(GtkWidget *widget,
|
customisation_toolbar_drag_leave_cb(GtkWidget *widget,
|
||||||
GdkDragContext *gdc,
|
GdkDragContext *gdc,
|
||||||
guint time,
|
guint time,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
|
gtk_toolbar_set_drop_highlight_item(GTK_TOOLBAR(widget), NULL, 0);
|
||||||
}
|
}
|
||||||
@ -2257,7 +2266,7 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* ensure icon sizes and text labels on toolbar are set */
|
/* ensure icon sizes and text labels on toolbar are set */
|
||||||
res = nsgtk_toolbar_update(&tbc->toolbar);
|
res = nsgtk_toolbar_restyle(&tbc->toolbar);
|
||||||
if (res != NSERROR_OK) {
|
if (res != NSERROR_OK) {
|
||||||
goto cutomize_button_clicked_cb_error;
|
goto cutomize_button_clicked_cb_error;
|
||||||
}
|
}
|
||||||
@ -2309,12 +2318,12 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data)
|
|||||||
G_CALLBACK(gtk_widget_destroy),
|
G_CALLBACK(gtk_widget_destroy),
|
||||||
tbc->container);
|
tbc->container);
|
||||||
|
|
||||||
#if 0
|
|
||||||
g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "apply")),
|
g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "apply")),
|
||||||
"clicked",
|
"clicked",
|
||||||
G_CALLBACK(nsgtk_toolbar_persist),
|
G_CALLBACK(customisation_apply_clicked_cb),
|
||||||
g);
|
tbc);
|
||||||
|
|
||||||
|
#if 0
|
||||||
g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "reset")),
|
g_signal_connect(GTK_WIDGET(gtk_builder_get_object(builder, "reset")),
|
||||||
"clicked",
|
"clicked",
|
||||||
G_CALLBACK(nsgtk_toolbar_reset),
|
G_CALLBACK(nsgtk_toolbar_reset),
|
||||||
@ -4021,30 +4030,12 @@ nsgtk_toolbar_create(GtkBuilder *builder,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res = apply_user_button_customisation(tb);
|
|
||||||
if (res != NSERROR_OK) {
|
|
||||||
free(tb);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = populate_gtk_toolbar_widget(tb);
|
|
||||||
if (res != NSERROR_OK) {
|
|
||||||
free(tb);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = nsgtk_toolbar_update(tb);
|
res = nsgtk_toolbar_update(tb);
|
||||||
if (res != NSERROR_OK) {
|
if (res != NSERROR_OK) {
|
||||||
free(tb);
|
free(tb);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
res = toolbar_connect_signals(tb);
|
|
||||||
if (res != NSERROR_OK) {
|
|
||||||
free(tb);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
*tb_out = tb;
|
*tb_out = tb;
|
||||||
return NSERROR_OK;
|
return NSERROR_OK;
|
||||||
}
|
}
|
||||||
@ -4059,7 +4050,7 @@ nserror nsgtk_toolbar_destroy(struct nsgtk_toolbar *tb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* exported interface documented in toolbar.h */
|
/* exported interface documented in toolbar.h */
|
||||||
nserror nsgtk_toolbar_update(struct nsgtk_toolbar *tb)
|
nserror nsgtk_toolbar_restyle(struct nsgtk_toolbar *tb)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* reset toolbar size allocation so icon size change affects
|
* reset toolbar size allocation so icon size change affects
|
||||||
@ -4245,3 +4236,32 @@ nserror nsgtk_toolbar_show(struct nsgtk_toolbar *tb, bool show)
|
|||||||
}
|
}
|
||||||
return NSERROR_OK;
|
return NSERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* exported interface documented in toolbar.h */
|
||||||
|
nserror nsgtk_toolbar_update(struct nsgtk_toolbar *tb)
|
||||||
|
{
|
||||||
|
nserror res;
|
||||||
|
|
||||||
|
/* setup item locations based on user config */
|
||||||
|
res = apply_user_button_customisation(tb);
|
||||||
|
if (res != NSERROR_OK) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* populate toolbar widget */
|
||||||
|
res = populate_gtk_toolbar_widget(tb);
|
||||||
|
if (res != NSERROR_OK) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ensure icon sizes and text labels on toolbar are set */
|
||||||
|
res = nsgtk_toolbar_restyle(tb);
|
||||||
|
if (res != NSERROR_OK) {
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
res = toolbar_connect_signals(tb);
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
@ -43,6 +43,13 @@ nserror nsgtk_toolbar_create(GtkBuilder *builder, struct browser_window *(*get_b
|
|||||||
*/
|
*/
|
||||||
nserror nsgtk_toolbar_destroy(struct nsgtk_toolbar *toolbar);
|
nserror nsgtk_toolbar_destroy(struct nsgtk_toolbar *toolbar);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the toolbar items being shown based on current settings
|
||||||
|
*
|
||||||
|
* \param toolbar A toolbar returned from a creation
|
||||||
|
* \return NSERROR_OK on success
|
||||||
|
*/
|
||||||
|
nserror nsgtk_toolbar_update(struct nsgtk_toolbar *tb);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update toolbar style and size based on current settings
|
* Update toolbar style and size based on current settings
|
||||||
@ -50,7 +57,7 @@ nserror nsgtk_toolbar_destroy(struct nsgtk_toolbar *toolbar);
|
|||||||
* \param toolbar A toolbar returned from a creation
|
* \param toolbar A toolbar returned from a creation
|
||||||
* \return NSERROR_OK on success
|
* \return NSERROR_OK on success
|
||||||
*/
|
*/
|
||||||
nserror nsgtk_toolbar_update(struct nsgtk_toolbar *tb);
|
nserror nsgtk_toolbar_restyle(struct nsgtk_toolbar *tb);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1506,7 +1506,7 @@ nserror nsgtk_window_update_all(void)
|
|||||||
struct gui_window *gw;
|
struct gui_window *gw;
|
||||||
for (gw = window_list; gw != NULL; gw = gw->next) {
|
for (gw = window_list; gw != NULL; gw = gw->next) {
|
||||||
nsgtk_tab_options_changed(nsgtk_scaffolding_notebook(gw->scaffold));
|
nsgtk_tab_options_changed(nsgtk_scaffolding_notebook(gw->scaffold));
|
||||||
nsgtk_toolbar_update(gw->toolbar);
|
nsgtk_toolbar_restyle(gw->toolbar);
|
||||||
/** \todo update search bar */
|
/** \todo update search bar */
|
||||||
browser_window_schedule_reformat(gw->bw);
|
browser_window_schedule_reformat(gw->bw);
|
||||||
}
|
}
|
||||||
@ -1525,3 +1525,14 @@ nserror nsgtk_window_toolbar_show(struct nsgtk_scaffolding *gs, bool show)
|
|||||||
}
|
}
|
||||||
return NSERROR_OK;
|
return NSERROR_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* exported interface documented in window.h */
|
||||||
|
nserror nsgtk_window_toolbar_update(void)
|
||||||
|
{
|
||||||
|
struct gui_window *gw;
|
||||||
|
for (gw = window_list; gw != NULL; gw = gw->next) {
|
||||||
|
nsgtk_toolbar_update(gw->toolbar);
|
||||||
|
|
||||||
|
}
|
||||||
|
return NSERROR_OK;
|
||||||
|
}
|
||||||
|
@ -54,6 +54,11 @@ struct nsgtk_scaffolding *nsgtk_get_scaffold(struct gui_window *gw);
|
|||||||
*/
|
*/
|
||||||
nserror nsgtk_window_update_all(void);
|
nserror nsgtk_window_update_all(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* every window will have its toolbar updated to reflect user settings
|
||||||
|
*/
|
||||||
|
nserror nsgtk_window_toolbar_update(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Windows associated with a scaffold will have their toolbar show state set
|
* Windows associated with a scaffold will have their toolbar show state set
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user