Allow Find Next and Find Previous when the findbox is hidden.
The find text should be preserved after hiding the findbox until it is shown again. Refactor the find code for both directions.
This commit is contained in:
parent
2c08ccbef5
commit
a9236468d9
1 changed files with 31 additions and 39 deletions
|
@ -115,7 +115,6 @@ void on_action_find_activate(GtkAction* action, CBrowser* browser)
|
||||||
{
|
{
|
||||||
GtkWidget* webView = get_nth_webView(-1, browser);
|
GtkWidget* webView = get_nth_webView(-1, browser);
|
||||||
webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(webView));
|
webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(webView));
|
||||||
gtk_entry_set_text(GTK_ENTRY(browser->findbox_text), "");
|
|
||||||
gtk_toggle_tool_button_set_active(
|
gtk_toggle_tool_button_set_active(
|
||||||
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_highlight), FALSE);
|
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_highlight), FALSE);
|
||||||
gtk_widget_hide(browser->findbox);
|
gtk_widget_hide(browser->findbox);
|
||||||
|
@ -125,22 +124,26 @@ void on_action_find_activate(GtkAction* action, CBrowser* browser)
|
||||||
GtkWidget* icon = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
|
GtkWidget* icon = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
|
||||||
sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(browser->findbox_text)
|
sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(browser->findbox_text)
|
||||||
, SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(icon));
|
, SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(icon));
|
||||||
|
gtk_entry_set_text(GTK_ENTRY(browser->findbox_text), "");
|
||||||
gtk_widget_show(browser->findbox);
|
gtk_widget_show(browser->findbox);
|
||||||
gtk_widget_grab_focus(GTK_WIDGET(browser->findbox_text));
|
gtk_widget_grab_focus(GTK_WIDGET(browser->findbox_text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_action_find_next_activate(GtkAction* action, CBrowser* browser)
|
static void findbox_find(gboolean forward, CBrowser* browser)
|
||||||
{
|
{
|
||||||
if(!GTK_WIDGET_VISIBLE(browser->findbox))
|
|
||||||
return;
|
|
||||||
const gchar* text = gtk_entry_get_text(GTK_ENTRY(browser->findbox_text));
|
const gchar* text = gtk_entry_get_text(GTK_ENTRY(browser->findbox_text));
|
||||||
const gboolean caseSensitive = gtk_toggle_tool_button_get_active(
|
const gboolean caseSensitive = gtk_toggle_tool_button_get_active(
|
||||||
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_case));
|
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_case));
|
||||||
GtkWidget* webView = get_nth_webView(-1, browser);
|
GtkWidget* webView = get_nth_webView(-1, browser);
|
||||||
GtkWidget* icon;
|
if(GTK_WIDGET_VISIBLE(browser->findbox))
|
||||||
webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(webView));
|
webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(webView));
|
||||||
if(webkit_web_view_search_text(WEBKIT_WEB_VIEW(webView), text, caseSensitive, TRUE, TRUE))
|
gboolean found = webkit_web_view_search_text(WEBKIT_WEB_VIEW(webView)
|
||||||
|
, text, caseSensitive, forward, TRUE);
|
||||||
|
if(GTK_WIDGET_VISIBLE(browser->findbox))
|
||||||
|
{
|
||||||
|
GtkWidget* icon;
|
||||||
|
if(found)
|
||||||
icon = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
|
icon = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
|
||||||
else
|
else
|
||||||
icon = gtk_image_new_from_stock(GTK_STOCK_STOP, GTK_ICON_SIZE_MENU);
|
icon = gtk_image_new_from_stock(GTK_STOCK_STOP, GTK_ICON_SIZE_MENU);
|
||||||
|
@ -150,28 +153,17 @@ void on_action_find_next_activate(GtkAction* action, CBrowser* browser)
|
||||||
const gboolean highlight = gtk_toggle_tool_button_get_active(
|
const gboolean highlight = gtk_toggle_tool_button_get_active(
|
||||||
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_highlight));
|
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_highlight));
|
||||||
webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(webView), highlight);
|
webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(webView), highlight);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void on_action_find_next_activate(GtkAction* action, CBrowser* browser)
|
||||||
|
{
|
||||||
|
findbox_find(TRUE, browser);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_action_find_previous_activate(GtkAction* action, CBrowser* browser)
|
void on_action_find_previous_activate(GtkAction* action, CBrowser* browser)
|
||||||
{
|
{
|
||||||
if(!GTK_WIDGET_VISIBLE(browser->findbox))
|
findbox_find(FALSE, browser);
|
||||||
return;
|
|
||||||
const gchar* text = gtk_entry_get_text(GTK_ENTRY(browser->findbox_text));
|
|
||||||
const gboolean caseSensitive = gtk_toggle_tool_button_get_active(
|
|
||||||
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_case));
|
|
||||||
GtkWidget* webView = get_nth_webView(-1, browser);
|
|
||||||
webkit_web_view_unmark_text_matches(WEBKIT_WEB_VIEW(webView));
|
|
||||||
GtkWidget* icon;
|
|
||||||
if(webkit_web_view_search_text(WEBKIT_WEB_VIEW(webView), text, caseSensitive, FALSE, TRUE))
|
|
||||||
icon = gtk_image_new_from_stock(GTK_STOCK_FIND, GTK_ICON_SIZE_MENU);
|
|
||||||
else
|
|
||||||
icon = gtk_image_new_from_stock(GTK_STOCK_STOP, GTK_ICON_SIZE_MENU);
|
|
||||||
sexy_icon_entry_set_icon(SEXY_ICON_ENTRY(browser->findbox_text)
|
|
||||||
, SEXY_ICON_ENTRY_PRIMARY, GTK_IMAGE(icon));
|
|
||||||
webkit_web_view_mark_text_matches(WEBKIT_WEB_VIEW(webView), text, caseSensitive, 0);
|
|
||||||
const gboolean highlight = gtk_toggle_tool_button_get_active(
|
|
||||||
GTK_TOGGLE_TOOL_BUTTON(browser->findbox_highlight));
|
|
||||||
webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(webView), highlight);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_findbox_highlight_toggled(GtkToggleToolButton* toolitem, CBrowser* browser)
|
void on_findbox_highlight_toggled(GtkToggleToolButton* toolitem, CBrowser* browser)
|
||||||
|
@ -181,6 +173,11 @@ void on_findbox_highlight_toggled(GtkToggleToolButton* toolitem, CBrowser* brows
|
||||||
webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(webView), highlight);
|
webkit_web_view_set_highlight_text_matches(WEBKIT_WEB_VIEW(webView), highlight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void on_findbox_button_close_clicked(GtkWidget* widget, CBrowser* browser)
|
||||||
|
{
|
||||||
|
gtk_widget_hide(browser->findbox);
|
||||||
|
}
|
||||||
|
|
||||||
void on_action_preferences_activate(GtkAction* action, CBrowser* browser)
|
void on_action_preferences_activate(GtkAction* action, CBrowser* browser)
|
||||||
{
|
{
|
||||||
// Show the preferences dialog. Create it if necessary.
|
// Show the preferences dialog. Create it if necessary.
|
||||||
|
@ -1051,11 +1048,6 @@ void on_notebook_switch_page(GtkWidget* widget, GtkNotebookPage* page
|
||||||
update_search_engines(browser);
|
update_search_engines(browser);
|
||||||
}
|
}
|
||||||
|
|
||||||
void on_findbox_button_close_clicked(GtkWidget* widget, CBrowser* browser)
|
|
||||||
{
|
|
||||||
gtk_widget_hide(browser->findbox);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void on_window_size_allocate(GtkWidget* widget, GtkAllocation* allocation
|
static void on_window_size_allocate(GtkWidget* widget, GtkAllocation* allocation
|
||||||
, CBrowser* browser)
|
, CBrowser* browser)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue