midori_view_can_find (MIDORI_VIEW (view)));
/* _action_set_sensitive (browser, "FindQuick",
midori_view_can_find (MIDORI_VIEW (view))); */
+ gtk_widget_set_sensitive (GTK_WIDGET (browser->find_highlight),
+ midori_view_can_find (MIDORI_VIEW (view)));
action = gtk_action_group_get_action (browser->action_group, "ReloadStop");
if (!loading)
g_signal_emit (browser, signals[NEW_WINDOW], 0, uri);
}
+static void
+midori_view_search_text_cb (GtkWidget* view,
+ gboolean found,
+ MidoriBrowser* browser)
+{
+ const gchar* text;
+ gboolean case_sensitive;
+ gboolean highlight;
+
+ if (GTK_WIDGET_VISIBLE (browser->find))
+ {
+ gtk_icon_entry_set_icon_from_stock (GTK_ICON_ENTRY (browser->find_text),
+ GTK_ICON_ENTRY_PRIMARY, (found) ? GTK_STOCK_FIND : GTK_STOCK_STOP);
+ text = gtk_entry_get_text (GTK_ENTRY (browser->find_text));
+ case_sensitive = gtk_toggle_tool_button_get_active (
+ GTK_TOGGLE_TOOL_BUTTON (browser->find_case));
+ midori_view_mark_text_matches (MIDORI_VIEW (view), text, case_sensitive);
+ highlight = gtk_toggle_tool_button_get_active (
+ GTK_TOGGLE_TOOL_BUTTON (browser->find_highlight));
+ midori_view_set_highlight_text_matches (MIDORI_VIEW (view), highlight);
+ }
+}
+
static gboolean
midori_browser_tab_destroy_cb (GtkWidget* widget,
MidoriBrowser* browser)
midori_view_new_tab_cb, browser,
"signal::new-window",
midori_view_new_window_cb, browser,
+ "signal::search-text",
+ midori_view_search_text_cb, browser,
"signal::add-bookmark",
midori_view_add_bookmark_cb, browser,
NULL);
}
}
-static void
-_midori_browser_tab_unmark_text_matches (MidoriBrowser* browser,
- GtkWidget* widget)
-{
- if (WEBKIT_IS_WEB_VIEW (widget))
- webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (widget));
-}
-
-static gboolean
-_midori_browser_tab_search_text (MidoriBrowser* browser,
- GtkWidget* widget,
- const gchar* text,
- gboolean case_sensitive,
- gboolean forward)
-{
- if (WEBKIT_IS_WEB_VIEW (widget))
- return webkit_web_view_search_text (WEBKIT_WEB_VIEW (widget),
- text, case_sensitive, forward, TRUE);
- return FALSE;
-}
-
-static void
-_midori_browser_tab_mark_text_matches (MidoriBrowser* browser,
- GtkWidget* widget,
- const gchar* text,
- gboolean case_sensitive)
-{
- if (WEBKIT_IS_WEB_VIEW (widget))
- webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (widget),
- text, case_sensitive, 0);
-}
-
-static void
-_midori_browser_tab_set_highlight_text_matches (MidoriBrowser* browser,
- GtkWidget* widget,
- gboolean highlight)
-{
- if (WEBKIT_IS_WEB_VIEW (widget))
- webkit_web_view_set_highlight_text_matches (
- WEBKIT_WEB_VIEW (widget), highlight);
-}
-
static void
_action_find_activate (GtkAction* action,
MidoriBrowser* browser)
{
+ GtkWidget* view;
+
if (GTK_WIDGET_VISIBLE (browser->find))
{
- GtkWidget* widget = midori_browser_get_current_tab (browser);
- _midori_browser_tab_unmark_text_matches (browser, widget);
+ view = midori_browser_get_current_tab (browser);
+ midori_view_unmark_text_matches (MIDORI_VIEW (view));
gtk_toggle_tool_button_set_active (
GTK_TOGGLE_TOOL_BUTTON (browser->find_highlight), FALSE);
gtk_widget_hide (browser->find);
_midori_browser_find (MidoriBrowser* browser,
gboolean forward)
{
- const gchar* text = gtk_entry_get_text (GTK_ENTRY (browser->find_text));
- const gboolean case_sensitive = gtk_toggle_tool_button_get_active (
+ const gchar* text;
+ gboolean case_sensitive;
+ GtkWidget* view;
+
+ text = gtk_entry_get_text (GTK_ENTRY (browser->find_text));
+ case_sensitive = gtk_toggle_tool_button_get_active (
GTK_TOGGLE_TOOL_BUTTON (browser->find_case));
- GtkWidget* widget = midori_browser_get_current_tab (browser);
- if (GTK_WIDGET_VISIBLE (browser->find))
- _midori_browser_tab_unmark_text_matches (browser, widget);
- gboolean found = _midori_browser_tab_search_text (browser, widget,
- text, case_sensitive, forward);
+ view = midori_browser_get_current_tab (browser);
+
if (GTK_WIDGET_VISIBLE (browser->find))
- {
- gtk_icon_entry_set_icon_from_stock (GTK_ICON_ENTRY (browser->find_text),
- GTK_ICON_ENTRY_PRIMARY,
- (found) ? GTK_STOCK_FIND : GTK_STOCK_STOP);
- _midori_browser_tab_mark_text_matches (browser, widget,
- text, case_sensitive);
- const gboolean highlight = gtk_toggle_tool_button_get_active (
- GTK_TOGGLE_TOOL_BUTTON (browser->find_highlight));
- _midori_browser_tab_set_highlight_text_matches (browser, widget,
- highlight);
- }
+ midori_view_unmark_text_matches (MIDORI_VIEW (view));
+ midori_view_search_text (MIDORI_VIEW (view), text, case_sensitive, forward);
}
static void
_find_highlight_toggled (GtkToggleToolButton* toolitem,
MidoriBrowser* browser)
{
- GtkWidget* widget = midori_browser_get_current_tab (browser);
- const gboolean highlight = gtk_toggle_tool_button_get_active (toolitem);
- _midori_browser_tab_set_highlight_text_matches (browser, widget,
- highlight);
+ GtkWidget* view;
+ gboolean highlight;
+
+ view = midori_browser_get_current_tab (browser);
+ highlight = gtk_toggle_tool_button_get_active (toolitem);
+ midori_view_set_highlight_text_matches (MIDORI_VIEW (view), highlight);
}
static void
CONSOLE_MESSAGE,
NEW_TAB,
NEW_WINDOW,
+ SEARCH_TEXT,
ADD_BOOKMARK,
LAST_SIGNAL
G_TYPE_NONE, 1,
G_TYPE_STRING);
+ signals[SEARCH_TEXT] = g_signal_new (
+ "search-text",
+ G_TYPE_FROM_CLASS (class),
+ (GSignalFlags)(G_SIGNAL_RUN_LAST),
+ 0,
+ 0,
+ NULL,
+ g_cclosure_marshal_VOID__BOOLEAN,
+ G_TYPE_NONE, 1,
+ G_TYPE_BOOLEAN);
+
signals[ADD_BOOKMARK] = g_signal_new (
"add-bookmark",
G_TYPE_FROM_CLASS (class),
return out;
}
-
static void
send_command (MidoriView* view,
const gchar* command,
send_command (view, "new-window", uri);
}
+static void
+midori_view_search_text_cb (MidoriView* view,
+ gboolean found)
+{
+ if (!midori_view_is_plug (view))
+ return;
+
+ send_command (view, "search-text", int_to_str (found));
+}
+
static void
midori_view_add_bookmark_cb (MidoriView* view,
const gchar* uri)
{
g_signal_emit (view, signals[NEW_WINDOW], 0, &command[11]);
}
+ else if (!strncmp (command, "search-text ", 12))
+ {
+ g_signal_emit (view, signals[SEARCH_TEXT], 0, atoi (&command[12]));
+ }
else if (!strncmp (command, "add-bookmark ", 13))
{
g_signal_emit (view, signals[ADD_BOOKMARK], 0, &command[13]);
midori_view_go_forward (view);
else if (!strncmp (command, "print", 5))
midori_view_print (view);
+ else if (!strncmp (command, "unmark-matches", 14))
+ midori_view_unmark_text_matches (view);
+ else if (!strncmp (command, "search-text ", 12))
+ /* (forward, case_sensitive, text) => (text, case_sensitive, forward) */
+ midori_view_search_text (view, &command[16],
+ atoi (&command[14]), atoi (&command[12]));
+ else if (!strncmp (command, "mark-matches ", 13))
+ /* (case_sensitive, text) => (text, case_sensitive) */
+ midori_view_mark_text_matches (view, &command[17],
+ atoi (&command[15]));
+ else if (!strncmp (command, "hl-matches ", 11))
+ midori_view_set_highlight_text_matches (view, atoi (&command[11]));
else if (!strncmp (command, "download-manager ", 17))
{
katze_assign (view->download_manager, g_strdup (&command[17]));
midori_view_new_tab_cb, NULL,
"signal::new-window",
midori_view_new_window_cb, NULL,
+ "signal::search-text",
+ midori_view_search_text_cb, NULL,
"signal::add-bookmark",
midori_view_add_bookmark_cb, NULL,
NULL);
webkit_web_view_execute_script (
WEBKIT_WEB_VIEW (view->web_view), "print();");
}
+
+/**
+ * midori_view_unmark_text_matches
+ * @view: a #MidoriView
+ *
+ * Unmarks the text matches in the view.
+ **/
+void
+midori_view_unmark_text_matches (MidoriView* view)
+{
+ g_return_if_fail (MIDORI_IS_VIEW (view));
+
+ if (midori_view_is_socket (view))
+ send_command (view, "unmark-matches", NULL);
+ else
+ webkit_web_view_unmark_text_matches (WEBKIT_WEB_VIEW (view->web_view));
+}
+
+/**
+ * midori_view_search_text
+ * @view: a #MidoriView
+ * @text: a string
+ * @case_sensitive: case sensitivity
+ * @forward: whether to search forward
+ *
+ * Searches a text within the view.
+ **/
+void
+midori_view_search_text (MidoriView* view,
+ const gchar* text,
+ gboolean case_sensitive,
+ gboolean forward)
+{
+ gchar* data;
+
+ g_return_if_fail (MIDORI_IS_VIEW (view));
+
+ if (midori_view_is_socket (view))
+ {
+ /* (text, case_sensitive, forward) => (forward, case_sensitive, text) */
+ data = g_strdup_printf ("%d %d %s", forward, case_sensitive, text);
+ send_command (view, "search-text", data);
+ g_free (data);
+ }
+ else
+ g_signal_emit (view, signals[SEARCH_TEXT], 0,
+ webkit_web_view_search_text (WEBKIT_WEB_VIEW (view->web_view),
+ text, case_sensitive, forward, TRUE));
+}
+
+/**
+ * midori_view_mark_text_matches
+ * @view: a #MidoriView
+ * @text: a string
+ * @case_sensitive: case sensitivity
+ *
+ * Marks all text matches within the view.
+ **/
+void
+midori_view_mark_text_matches (MidoriView* view,
+ const gchar* text,
+ gboolean case_sensitive)
+{
+ gchar* data;
+
+ g_return_if_fail (MIDORI_IS_VIEW (view));
+
+ if (midori_view_is_socket (view))
+ {
+ /* (text, case_sensitive) => (case_sensitive, text) */
+ data = g_strdup_printf ("%d %s", case_sensitive, text);
+ send_command (view, "mark-matches", data);
+ g_free (data);
+ }
+ else
+ webkit_web_view_mark_text_matches (WEBKIT_WEB_VIEW (view->web_view),
+ text, case_sensitive, 0);
+}
+
+/**
+ * midori_view_set_highlight_text_matches
+ * @view: a #MidoriView
+ * @highlight: whether to highlight matches
+ *
+ * Whether to highlight all matches within the view.
+ **/
+void
+midori_view_set_highlight_text_matches (MidoriView* view,
+ gboolean highlight)
+{
+ g_return_if_fail (MIDORI_IS_VIEW (view));
+
+ if (midori_view_is_socket (view))
+ send_command (view, "hl-matches", int_to_str (highlight));
+ else
+ webkit_web_view_set_highlight_text_matches (
+ WEBKIT_WEB_VIEW (view->web_view), highlight);
+}