cleanup some toolbar item creation bits

This commit is contained in:
Vincent Sanders 2019-09-11 20:56:59 +01:00 committed by Daniel Silverstone
parent a8e186f120
commit 3df34e7dec

View File

@ -181,7 +181,7 @@ static bool edit_mode = false;
/* the 'standard' width of a button that makes sufficient of its label /* the 'standard' width of a button that makes sufficient of its label
visible */ visible */
#define NSGTK_BUTTON_WIDTH 130 #define NSGTK_BUTTON_WIDTH 120
/* the 'standard' height of a button that fits as many toolbars as /* the 'standard' height of a button that fits as many toolbars as
possible into the store */ possible into the store */
@ -542,7 +542,7 @@ static char *remove_underscores(const char *s, bool replacespace)
* create a gtk entry widget with a completion attached * create a gtk entry widget with a completion attached
*/ */
static GtkToolItem * static GtkToolItem *
make_toolbar_item_throbber(void) make_toolbar_item_throbber(bool sensitivity)
{ {
nserror res; nserror res;
GtkToolItem *item; GtkToolItem *item;
@ -571,6 +571,8 @@ make_toolbar_item_throbber(void)
gtk_container_add(GTK_CONTAINER(item), image); gtk_container_add(GTK_CONTAINER(item), image);
} }
} }
gtk_widget_set_sensitive(GTK_WIDGET(item), sensitivity);
return item; return item;
} }
@ -580,7 +582,7 @@ make_toolbar_item_throbber(void)
* create a gtk entry widget with a completion attached * create a gtk entry widget with a completion attached
*/ */
static GtkToolItem * static GtkToolItem *
make_toolbar_item_url_bar(void) make_toolbar_item_url_bar(bool sensitivity)
{ {
GtkToolItem *item; GtkToolItem *item;
GtkWidget *entry; GtkWidget *entry;
@ -594,10 +596,17 @@ make_toolbar_item_url_bar(void)
return NULL; return NULL;
} }
gtk_entry_set_completion(GTK_ENTRY(entry), completion); gtk_widget_set_sensitive(GTK_WIDGET(item), sensitivity);
gtk_container_add(GTK_CONTAINER(item), entry); gtk_container_add(GTK_CONTAINER(item), entry);
gtk_tool_item_set_expand(item, TRUE); gtk_tool_item_set_expand(item, TRUE);
if (edit_mode) {
gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE);
} else {
gtk_entry_set_completion(GTK_ENTRY(entry), completion);
}
return item; return item;
} }
@ -606,17 +615,9 @@ make_toolbar_item_url_bar(void)
* create web search toolbar item widget * create web search toolbar item widget
*/ */
static GtkToolItem * static GtkToolItem *
make_toolbar_item_websearch(void) make_toolbar_item_websearch(bool sensitivity)
{ {
GtkToolItem *item; GtkToolItem *item;
if (edit_mode) {
item = gtk_tool_button_new(
GTK_WIDGET(nsgtk_image_new_from_stock(
NSGTK_STOCK_FIND,
GTK_ICON_SIZE_LARGE_TOOLBAR)),
"[websearch]");
} else {
nserror res; nserror res;
GtkWidget *entry; GtkWidget *entry;
struct bitmap *bitmap; struct bitmap *bitmap;
@ -629,6 +630,8 @@ make_toolbar_item_websearch(void)
return NULL; return NULL;
} }
gtk_widget_set_sensitive(GTK_WIDGET(item), sensitivity);
gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1); gtk_widget_set_size_request(entry, NSGTK_WEBSEARCH_WIDTH, -1);
res = search_web_get_provider_bitmap(&bitmap); res = search_web_get_provider_bitmap(&bitmap);
@ -648,6 +651,9 @@ make_toolbar_item_websearch(void)
} }
gtk_container_add(GTK_CONTAINER(item), entry); gtk_container_add(GTK_CONTAINER(item), entry);
if (edit_mode) {
gtk_widget_set_sensitive(GTK_WIDGET(entry), FALSE);
} }
return item; return item;
@ -662,114 +668,97 @@ make_toolbar_item_websearch(void)
* \return gtk widget * \return gtk widget
*/ */
static GtkToolItem * static GtkToolItem *
make_toolbar_item(nsgtk_toolbar_button i, struct nsgtk_theme *theme) make_toolbar_item(nsgtk_toolbar_button itemid,
struct nsgtk_theme *theme,
bool sensitivity)
{ {
GtkToolItem *w = NULL; GtkToolItem *w = NULL;
switch(i) { switch(itemid) {
/* gtk_tool_button_new() accepts NULL args */
#define MAKE_STOCKBUTTON(p, q) \
case p##_BUTTON: { \
GtkStockItem item; \
char *label = NULL; \
if (nsgtk_stock_lookup(q, &item) && \
(item.label != NULL) && \
((label = remove_underscores(item.label, false)) != NULL)) { \
w = gtk_tool_button_new(GTK_WIDGET( \
theme->image[p##_BUTTON]), label); \
free(label); \
} else { \
w = gtk_tool_button_new(GTK_WIDGET( \
theme->image[p##_BUTTON]), q); \
} \
break; \
}
/* gtk_tool_button_new accepts NULL args */ /* gtk_tool_button_new accepts NULL args */
#define MAKE_MENUBUTTON(p, q) \ #define MAKE_ITEM(p, q) \
case p##_BUTTON: { \ case p##_BUTTON: { \
char *label = NULL; \ char *label = NULL; \
label = remove_underscores(messages_get(#q), false); \ label = remove_underscores(messages_get(#q), false); \
w = gtk_tool_button_new( \ w = gtk_tool_button_new(GTK_WIDGET(theme->image[p##_BUTTON]), \
GTK_WIDGET(theme->image[p##_BUTTON]), \
label); \ label); \
gtk_widget_set_sensitive(GTK_WIDGET(w), sensitivity); \
if (label != NULL) { \ if (label != NULL) { \
free(label); \ free(label); \
} \ } \
break; \ break; \
} }
MAKE_STOCKBUTTON(HOME, NSGTK_STOCK_HOME) MAKE_ITEM(HOME, gtkHome)
MAKE_STOCKBUTTON(BACK, NSGTK_STOCK_GO_BACK) MAKE_ITEM(BACK, gtkBack)
MAKE_STOCKBUTTON(FORWARD, NSGTK_STOCK_GO_FORWARD) MAKE_ITEM(FORWARD, gtkForward)
MAKE_STOCKBUTTON(STOP, NSGTK_STOCK_STOP) MAKE_ITEM(STOP, Stop)
MAKE_STOCKBUTTON(RELOAD, NSGTK_STOCK_REFRESH) MAKE_ITEM(RELOAD, Reload)
MAKE_ITEM(NEWWINDOW, gtkNewWindow)
MAKE_ITEM(NEWTAB, gtkNewTab)
MAKE_ITEM(OPENFILE, gtkOpenFile)
MAKE_ITEM(CLOSETAB, gtkCloseTab)
MAKE_ITEM(CLOSEWINDOW, gtkCloseWindow)
MAKE_ITEM(SAVEPAGE, gtkSavePage)
MAKE_ITEM(PRINTPREVIEW, gtkPrintPreview)
MAKE_ITEM(PRINT, gtkPrint)
MAKE_ITEM(QUIT, gtkQuitMenu)
MAKE_ITEM(CUT, gtkCut)
MAKE_ITEM(COPY, gtkCopy)
MAKE_ITEM(PASTE, gtkPaste)
MAKE_ITEM(DELETE, gtkDelete)
MAKE_ITEM(SELECTALL, gtkSelectAll)
MAKE_ITEM(PREFERENCES, gtkPreferences)
MAKE_ITEM(ZOOMPLUS, gtkZoomPlus)
MAKE_ITEM(ZOOMMINUS, gtkZoomMinus)
MAKE_ITEM(ZOOMNORMAL, gtkZoomNormal)
MAKE_ITEM(FULLSCREEN, gtkFullScreen)
MAKE_ITEM(VIEWSOURCE, gtkViewSource)
MAKE_ITEM(CONTENTS, gtkContents)
MAKE_ITEM(ABOUT, gtkAbout)
MAKE_ITEM(PDF, gtkPDF)
MAKE_ITEM(PLAINTEXT, gtkPlainText)
MAKE_ITEM(DRAWFILE, gtkDrawFile)
MAKE_ITEM(POSTSCRIPT, gtkPostScript)
MAKE_ITEM(FIND, gtkFind)
MAKE_ITEM(DOWNLOADS, gtkDownloads)
MAKE_ITEM(SAVEWINDOWSIZE, gtkSaveWindowSize)
MAKE_ITEM(TOGGLEDEBUGGING, gtkToggleDebugging)
MAKE_ITEM(SAVEBOXTREE, gtkDebugBoxTree)
MAKE_ITEM(SAVEDOMTREE, gtkDebugDomTree)
MAKE_ITEM(LOCALHISTORY, gtkLocalHistory)
MAKE_ITEM(GLOBALHISTORY, gtkGlobalHistory)
MAKE_ITEM(ADDBOOKMARKS, gtkAddBookMarks)
MAKE_ITEM(SHOWBOOKMARKS, gtkShowBookMarks)
MAKE_ITEM(SHOWCOOKIES, gtkShowCookies)
MAKE_ITEM(OPENLOCATION, gtkOpenLocation)
MAKE_ITEM(NEXTTAB, gtkNextTab)
MAKE_ITEM(PREVTAB, gtkPrevTab)
MAKE_ITEM(GUIDE, gtkGuide)
MAKE_ITEM(INFO, gtkUserInformation)
MAKE_ITEM(OPENMENU, gtkOpenMenu)
MAKE_MENUBUTTON(NEWWINDOW, gtkNewWindow) #undef MAKE_ITEM
MAKE_MENUBUTTON(NEWTAB, gtkNewTab)
MAKE_MENUBUTTON(OPENFILE, gtkOpenFile)
MAKE_MENUBUTTON(CLOSETAB, gtkCloseTab)
MAKE_MENUBUTTON(CLOSEWINDOW, gtkCloseWindow)
MAKE_MENUBUTTON(SAVEPAGE, gtkSavePage)
MAKE_MENUBUTTON(PRINTPREVIEW, gtkPrintPreview)
MAKE_MENUBUTTON(PRINT, gtkPrint)
MAKE_MENUBUTTON(QUIT, gtkQuitMenu)
MAKE_MENUBUTTON(CUT, gtkCut)
MAKE_MENUBUTTON(COPY, gtkCopy)
MAKE_MENUBUTTON(PASTE, gtkPaste)
MAKE_MENUBUTTON(DELETE, gtkDelete)
MAKE_MENUBUTTON(SELECTALL, gtkSelectAll)
MAKE_MENUBUTTON(PREFERENCES, gtkPreferences)
MAKE_MENUBUTTON(ZOOMPLUS, gtkZoomPlus)
MAKE_MENUBUTTON(ZOOMMINUS, gtkZoomMinus)
MAKE_MENUBUTTON(ZOOMNORMAL, gtkZoomNormal)
MAKE_MENUBUTTON(FULLSCREEN, gtkFullScreen)
MAKE_MENUBUTTON(VIEWSOURCE, gtkViewSource)
MAKE_MENUBUTTON(CONTENTS, gtkContents)
MAKE_MENUBUTTON(ABOUT, gtkAbout)
MAKE_MENUBUTTON(PDF, gtkPDF)
MAKE_MENUBUTTON(PLAINTEXT, gtkPlainText)
MAKE_MENUBUTTON(DRAWFILE, gtkDrawFile)
MAKE_MENUBUTTON(POSTSCRIPT, gtkPostScript)
MAKE_MENUBUTTON(FIND, gtkFind)
MAKE_MENUBUTTON(DOWNLOADS, gtkDownloads)
MAKE_MENUBUTTON(SAVEWINDOWSIZE, gtkSaveWindowSize)
MAKE_MENUBUTTON(TOGGLEDEBUGGING, gtkToggleDebugging)
MAKE_MENUBUTTON(SAVEBOXTREE, gtkDebugBoxTree)
MAKE_MENUBUTTON(SAVEDOMTREE, gtkDebugDomTree)
MAKE_MENUBUTTON(LOCALHISTORY, gtkLocalHistory)
MAKE_MENUBUTTON(GLOBALHISTORY, gtkGlobalHistory)
MAKE_MENUBUTTON(ADDBOOKMARKS, gtkAddBookMarks)
MAKE_MENUBUTTON(SHOWBOOKMARKS, gtkShowBookMarks)
MAKE_MENUBUTTON(SHOWCOOKIES, gtkShowCookies)
MAKE_MENUBUTTON(OPENLOCATION, gtkOpenLocation)
MAKE_MENUBUTTON(NEXTTAB, gtkNextTab)
MAKE_MENUBUTTON(PREVTAB, gtkPrevTab)
MAKE_MENUBUTTON(GUIDE, gtkGuide)
MAKE_MENUBUTTON(INFO, gtkUserInformation)
MAKE_MENUBUTTON(OPENMENU, gtkOpenMenu)
#undef MAKE_STOCKBUTTON
#undef MAKE_MENUBUTTON
case HISTORY_BUTTON: case HISTORY_BUTTON:
w = gtk_tool_button_new(GTK_WIDGET( w = gtk_tool_button_new(GTK_WIDGET(
theme->image[HISTORY_BUTTON]), "H"); theme->image[HISTORY_BUTTON]), "H");
/* set history widget minimum width */ /* set history widget minimum width */
gtk_widget_set_size_request(GTK_WIDGET(w), 20, -1); gtk_widget_set_size_request(GTK_WIDGET(w), 20, -1);
gtk_widget_set_sensitive(GTK_WIDGET(w), sensitivity);
break; break;
case URL_BAR_ITEM: case URL_BAR_ITEM:
w = make_toolbar_item_url_bar(); w = make_toolbar_item_url_bar(sensitivity);
break; break;
case THROBBER_ITEM: case THROBBER_ITEM:
w = make_toolbar_item_throbber(); w = make_toolbar_item_throbber(sensitivity);
break; break;
case WEBSEARCH_ITEM: case WEBSEARCH_ITEM:
w = make_toolbar_item_websearch(); w = make_toolbar_item_websearch(sensitivity);
break; break;
default: default:
@ -1011,7 +1000,9 @@ customisation_toolbar_drag_drop_cb(GtkWidget *widget,
return TRUE; return TRUE;
} }
dragitem->button = make_toolbar_item(tbc->dragitem, theme); edit_mode = true;
dragitem->button = make_toolbar_item(tbc->dragitem, theme, true);
edit_mode = false;
free(theme); free(theme);
if (dragitem->button == NULL) { if (dragitem->button == NULL) {
@ -1247,12 +1238,8 @@ add_item_to_toolbar(struct nsgtk_toolbar *tb,
if (tb->buttons[bidx]->location == location) { if (tb->buttons[bidx]->location == location) {
tb->buttons[bidx]->button = make_toolbar_item(bidx, tb->buttons[bidx]->button = make_toolbar_item(
theme); bidx, theme, tb->buttons[bidx]->sensitivity);
/* set widgets initial sensitivity */
gtk_widget_set_sensitive(GTK_WIDGET(tb->buttons[bidx]->button),
tb->buttons[bidx]->sensitivity);
gtk_toolbar_insert(tb->widget, gtk_toolbar_insert(tb->widget,
tb->buttons[bidx]->button, tb->buttons[bidx]->button,
@ -1492,12 +1479,28 @@ toolbar_customisation_connect_signals(struct nsgtk_toolbar *tb)
} }
static void
item_size_allocate_cb(GtkWidget *widget,
GdkRectangle *alloc,
gpointer user_data)
{
if (alloc->width > NSGTK_BUTTON_WIDTH) {
alloc->width = NSGTK_BUTTON_WIDTH;
}
if (alloc->height > NSGTK_BUTTON_HEIGHT) {
alloc->height = NSGTK_BUTTON_HEIGHT;
}
//NSLOG(netsurf, ERROR, "w:%d h:%d", alloc->width, alloc->height);
gtk_widget_set_allocation(widget, alloc);
}
/** /**
* add a row to a toolbar customisation toolbox * add a row to a toolbar customisation toolbox
* *
* \param tbc The toolbar customisation context * \param tbc The toolbar customisation context
* \param startitem The item index of the beginning of the row * \param startitem The item index of the beginning of the row
* \param enditem The item index of teh beginning of teh next row * \param enditem The item index of the beginning of the next row
* \return NSERROR_OK on successs else error * \return NSERROR_OK on successs else error
*/ */
static nserror static nserror
@ -1535,6 +1538,10 @@ add_toolbox_row(struct nsgtk_toolbar_customisation *tbc,
"drag-data-get", "drag-data-get",
G_CALLBACK(tbc->toolbar.buttons[iidx]->dataplus), G_CALLBACK(tbc->toolbar.buttons[iidx]->dataplus),
&tbc->toolbar); &tbc->toolbar);
g_signal_connect(tbc->items[iidx],
"size-allocate",
G_CALLBACK(item_size_allocate_cb),
NULL);
gtk_toolbar_insert(rowbar, tbc->items[iidx], iidx - startitem); gtk_toolbar_insert(rowbar, tbc->items[iidx], iidx - startitem);
} }
return NSERROR_OK; return NSERROR_OK;
@ -1577,7 +1584,7 @@ toolbar_customisation_create_toolbox(struct nsgtk_toolbar_customisation *tbc,
curcol = 0; curcol = 0;
startidx = iidx; startidx = iidx;
} }
tbc->items[iidx] = make_toolbar_item(iidx, theme); tbc->items[iidx] = make_toolbar_item(iidx, theme, true);
if (tbc->items[iidx] != NULL) { if (tbc->items[iidx] != NULL) {
curcol++; curcol++;
} }
@ -1593,26 +1600,6 @@ toolbar_customisation_create_toolbox(struct nsgtk_toolbar_customisation *tbc,
} }
/**
* 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;
}
/** /**
* update toolbar in customisation to user settings * update toolbar in customisation to user settings
*/ */
@ -1660,6 +1647,27 @@ customisation_toolbar_update(struct nsgtk_toolbar_customisation *tbc)
return NSERROR_OK; 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;
}
/** /**
* customisation reset handler for clicked signal * customisation reset handler for clicked signal
* *
@ -1752,6 +1760,7 @@ static gboolean cutomize_button_clicked_cb(GtkWidget *widget, gpointer data)
} }
goto cutomize_button_clicked_cb_error; goto cutomize_button_clicked_cb_error;
} }
tbc->toolbar.buttons[iidx]->sensitivity = true;
} }
res = customisation_toolbar_update(tbc); res = customisation_toolbar_update(tbc);