diff options
Diffstat (limited to 'src/ephy-history-window.c')
-rw-r--r-- | src/ephy-history-window.c | 1002 |
1 files changed, 490 insertions, 512 deletions
diff --git a/src/ephy-history-window.c b/src/ephy-history-window.c index 9d13691a5..544e66682 100644 --- a/src/ephy-history-window.c +++ b/src/ephy-history-window.c @@ -40,817 +40,795 @@ /* 3/5 of gdkframeclockidle.c's FRAME_INTERVAL (16667 microsecs) */ #define GTK_TREE_VIEW_TIME_MS_PER_IDLE 10 -struct _EphyHistoryWindow -{ - GtkDialog parent_instance; +struct _EphyHistoryWindow { + GtkDialog parent_instance; - EphyHistoryService *history_service; - GCancellable *cancellable; + EphyHistoryService *history_service; + GCancellable *cancellable; - GtkWidget *treeview; - GtkTreeSelection *tree_selection; - GtkWidget *liststore; - GtkTreeViewColumn *date_column; - GtkTreeViewColumn *name_column; - GtkTreeViewColumn *location_column; - GtkWidget *date_renderer; - GtkWidget *location_renderer; - GMenuModel *treeview_popup_menu_model; + GtkWidget *treeview; + GtkTreeSelection *tree_selection; + GtkWidget *liststore; + GtkTreeViewColumn *date_column; + GtkTreeViewColumn *name_column; + GtkTreeViewColumn *location_column; + GtkWidget *date_renderer; + GtkWidget *location_renderer; + GMenuModel *treeview_popup_menu_model; - GActionGroup *action_group; + GActionGroup *action_group; - GList *urls; - guint sorter_source; + GList *urls; + guint sorter_source; - char *search_text; + char *search_text; - gboolean sort_ascending; - gint sort_column; + gboolean sort_ascending; + gint sort_column; - GtkWidget *window; + GtkWidget *window; - GtkWidget *confirmation_dialog; + GtkWidget *confirmation_dialog; }; G_DEFINE_TYPE (EphyHistoryWindow, ephy_history_window, GTK_TYPE_DIALOG) -enum -{ - PROP_0, - PROP_HISTORY_SERVICE, - LAST_PROP +enum { + PROP_0, + PROP_HISTORY_SERVICE, + LAST_PROP }; static GParamSpec *obj_properties[LAST_PROP]; -typedef enum -{ - COLUMN_DATE, - COLUMN_NAME, - COLUMN_LOCATION +typedef enum { + COLUMN_DATE, + COLUMN_NAME, + COLUMN_LOCATION } EphyHistoryWindowColumns; static gboolean add_urls_source (EphyHistoryWindow *self) { - EphyHistoryURL *url; - GTimer *timer; - GList *element; - - if (self->urls == NULL) - { - self->sorter_source = 0; - return G_SOURCE_REMOVE; - } + EphyHistoryURL *url; + GTimer *timer; + GList *element; - timer = g_timer_new (); - g_timer_start (timer); + if (self->urls == NULL) { + self->sorter_source = 0; + return G_SOURCE_REMOVE; + } - do { - element = self->urls; - url = element->data; - gtk_list_store_insert_with_values (GTK_LIST_STORE (self->liststore), - NULL, G_MAXINT, - COLUMN_DATE, url->last_visit_time, - COLUMN_NAME, url->title, - COLUMN_LOCATION, url->url, - -1); - self->urls = g_list_remove_link (self->urls, element); - ephy_history_url_free (url); - g_list_free_1 (element); + timer = g_timer_new (); + g_timer_start (timer); - } while (self->urls && - g_timer_elapsed (timer, NULL) < GTK_TREE_VIEW_TIME_MS_PER_IDLE / 1000.); + do { + element = self->urls; + url = element->data; + gtk_list_store_insert_with_values (GTK_LIST_STORE (self->liststore), + NULL, G_MAXINT, + COLUMN_DATE, url->last_visit_time, + COLUMN_NAME, url->title, + COLUMN_LOCATION, url->url, + -1); + self->urls = g_list_remove_link (self->urls, element); + ephy_history_url_free (url); + g_list_free_1 (element); + } while (self->urls && + g_timer_elapsed (timer, NULL) < GTK_TREE_VIEW_TIME_MS_PER_IDLE / 1000.); - g_timer_destroy (timer); + g_timer_destroy (timer); - return G_SOURCE_CONTINUE; + return G_SOURCE_CONTINUE; } static void on_find_urls_cb (gpointer service, - gboolean success, - gpointer result_data, - gpointer user_data) + gboolean success, + gpointer result_data, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - GtkTreeViewColumn *column; + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + GtkTreeViewColumn *column; - if (success != TRUE) - return; + if (success != TRUE) + return; - self->urls = (GList *)result_data; + self->urls = (GList *)result_data; - gtk_tree_view_set_model (GTK_TREE_VIEW (self->treeview), NULL); - gtk_list_store_clear (GTK_LIST_STORE (self->liststore)); - gtk_tree_view_set_model (GTK_TREE_VIEW (self->treeview), GTK_TREE_MODEL (self->liststore)); + gtk_tree_view_set_model (GTK_TREE_VIEW (self->treeview), NULL); + gtk_list_store_clear (GTK_LIST_STORE (self->liststore)); + gtk_tree_view_set_model (GTK_TREE_VIEW (self->treeview), GTK_TREE_MODEL (self->liststore)); - column = gtk_tree_view_get_column (GTK_TREE_VIEW (self->treeview), self->sort_column); - gtk_tree_view_column_set_sort_order (column, self->sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); - gtk_tree_view_column_set_sort_indicator (column, TRUE); - - self->sorter_source = g_idle_add ((GSourceFunc)add_urls_source, self); + column = gtk_tree_view_get_column (GTK_TREE_VIEW (self->treeview), self->sort_column); + gtk_tree_view_column_set_sort_order (column, self->sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); + gtk_tree_view_column_set_sort_indicator (column, TRUE); + self->sorter_source = g_idle_add ((GSourceFunc)add_urls_source, self); } static GList * substrings_filter (EphyHistoryWindow *self) { - char **tokens, **p; - GList *substrings = NULL; + char **tokens, **p; + GList *substrings = NULL; - if (self->search_text == NULL) - return NULL; + if (self->search_text == NULL) + return NULL; - tokens = p = g_strsplit (self->search_text, " ", -1); + tokens = p = g_strsplit (self->search_text, " ", -1); - while (*p) { - substrings = g_list_prepend (substrings, *p++); - }; - g_free (tokens); + while (*p) { + substrings = g_list_prepend (substrings, *p++); + } + ; + g_free (tokens); - return substrings; + return substrings; } static void -remove_pending_sorter_source (EphyHistoryWindow *self) { - - if (self->sorter_source != 0) - { - g_source_remove (self->sorter_source); - self->sorter_source = 0; - } +remove_pending_sorter_source (EphyHistoryWindow *self) +{ + if (self->sorter_source != 0) { + g_source_remove (self->sorter_source); + self->sorter_source = 0; + } - if (self->urls != NULL) - { - g_list_free_full (self->urls, (GDestroyNotify)ephy_history_url_free); - self->urls = NULL; - } + if (self->urls != NULL) { + g_list_free_full (self->urls, (GDestroyNotify)ephy_history_url_free); + self->urls = NULL; + } } static void filter_now (EphyHistoryWindow *self) { - gint64 from, to; - GList *substrings; - EphyHistorySortType type; + gint64 from, to; + GList *substrings; + EphyHistorySortType type; - substrings = substrings_filter (self); + substrings = substrings_filter (self); - from = to = -1; /* all */ + from = to = -1; /* all */ - switch (self->sort_column) - { - case COLUMN_DATE: - type = self->sort_ascending ? EPHY_HISTORY_SORT_LEAST_RECENTLY_VISITED : EPHY_HISTORY_SORT_MOST_RECENTLY_VISITED; - break; - case COLUMN_NAME: - type = self->sort_ascending ? EPHY_HISTORY_SORT_TITLE_ASCENDING : EPHY_HISTORY_SORT_TITLE_DESCENDING; - break; - case COLUMN_LOCATION: - type = self->sort_ascending ? EPHY_HISTORY_SORT_URL_ASCENDING : EPHY_HISTORY_SORT_URL_DESCENDING; - break; - default: - type = EPHY_HISTORY_SORT_MOST_RECENTLY_VISITED; - } + switch (self->sort_column) { + case COLUMN_DATE: + type = self->sort_ascending ? EPHY_HISTORY_SORT_LEAST_RECENTLY_VISITED : EPHY_HISTORY_SORT_MOST_RECENTLY_VISITED; + break; + case COLUMN_NAME: + type = self->sort_ascending ? EPHY_HISTORY_SORT_TITLE_ASCENDING : EPHY_HISTORY_SORT_TITLE_DESCENDING; + break; + case COLUMN_LOCATION: + type = self->sort_ascending ? EPHY_HISTORY_SORT_URL_ASCENDING : EPHY_HISTORY_SORT_URL_DESCENDING; + break; + default: + type = EPHY_HISTORY_SORT_MOST_RECENTLY_VISITED; + } - remove_pending_sorter_source (self); + remove_pending_sorter_source (self); - ephy_history_service_find_urls (self->history_service, - from, to, - NUM_RESULTS_LIMIT, 0, - substrings, - type, - self->cancellable, - (EphyHistoryJobCallback)on_find_urls_cb, self); + ephy_history_service_find_urls (self->history_service, + from, to, + NUM_RESULTS_LIMIT, 0, + substrings, + type, + self->cancellable, + (EphyHistoryJobCallback)on_find_urls_cb, self); } static void -confirmation_dialog_response_cb (GtkWidget *dialog, - int response, - EphyHistoryWindow *self) +confirmation_dialog_response_cb (GtkWidget *dialog, + int response, + EphyHistoryWindow *self) { - gtk_widget_destroy (dialog); + gtk_widget_destroy (dialog); - if (response == GTK_RESPONSE_ACCEPT) - { - ephy_history_service_clear (self->history_service, - NULL, NULL, NULL); - filter_now (self); - } + if (response == GTK_RESPONSE_ACCEPT) { + ephy_history_service_clear (self->history_service, + NULL, NULL, NULL); + filter_now (self); + } } static GtkWidget * confirmation_dialog_construct (EphyHistoryWindow *self) { - GtkWidget *dialog, *button; + GtkWidget *dialog, *button; - dialog = gtk_message_dialog_new - (GTK_WINDOW (self), - GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, - GTK_MESSAGE_WARNING, - GTK_BUTTONS_CANCEL, - _("Clear browsing history?")); + dialog = gtk_message_dialog_new + (GTK_WINDOW (self), + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, + GTK_MESSAGE_WARNING, + GTK_BUTTONS_CANCEL, + _("Clear browsing history?")); - gtk_message_dialog_format_secondary_text - (GTK_MESSAGE_DIALOG (dialog), - _("Clearing the browsing history will cause all" - " history links to be permanently deleted.")); + gtk_message_dialog_format_secondary_text + (GTK_MESSAGE_DIALOG (dialog), + _("Clearing the browsing history will cause all" + " history links to be permanently deleted.")); - gtk_window_group_add_window (ephy_gui_ensure_window_group (GTK_WINDOW (self)), - GTK_WINDOW (dialog)); + gtk_window_group_add_window (ephy_gui_ensure_window_group (GTK_WINDOW (self)), + GTK_WINDOW (dialog)); - button = gtk_button_new_with_mnemonic (_("Cl_ear")); - gtk_widget_show (button); - gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_ACCEPT); + button = gtk_button_new_with_mnemonic (_("Cl_ear")); + gtk_widget_show (button); + gtk_dialog_add_action_widget (GTK_DIALOG (dialog), button, GTK_RESPONSE_ACCEPT); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); + gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL); - g_signal_connect (dialog, "response", - G_CALLBACK (confirmation_dialog_response_cb), - self); + g_signal_connect (dialog, "response", + G_CALLBACK (confirmation_dialog_response_cb), + self); - return dialog; + return dialog; } static void -forget_all (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +forget_all (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - if (self->confirmation_dialog == NULL) - { - GtkWidget **confirmation_dialog; + if (self->confirmation_dialog == NULL) { + GtkWidget **confirmation_dialog; - self->confirmation_dialog = confirmation_dialog_construct (self); - confirmation_dialog = &self->confirmation_dialog; - g_object_add_weak_pointer (G_OBJECT (self->confirmation_dialog), - (gpointer *) confirmation_dialog); - } + self->confirmation_dialog = confirmation_dialog_construct (self); + confirmation_dialog = &self->confirmation_dialog; + g_object_add_weak_pointer (G_OBJECT (self->confirmation_dialog), + (gpointer *)confirmation_dialog); + } - gtk_widget_show (self->confirmation_dialog); + gtk_widget_show (self->confirmation_dialog); } static GtkWidget * get_target_window (EphyHistoryWindow *self) { - if (self->window) - { - return self->window; - } - else - { - return GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (ephy_shell_get_default ()))); - } + if (self->window) { + return self->window; + } else { + return GTK_WIDGET (gtk_application_get_active_window (GTK_APPLICATION (ephy_shell_get_default ()))); + } } static void on_browse_history_deleted_cb (gpointer service, - gboolean success, - gpointer result_data, - gpointer user_data) + gboolean success, + gpointer result_data, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - if (success != TRUE) - return; + if (success != TRUE) + return; - filter_now (self); + filter_now (self); } static EphyHistoryURL * get_url_from_path (GtkTreeModel *model, - GtkTreePath *path) + GtkTreePath *path) { - GtkTreeIter iter; + GtkTreeIter iter; - EphyHistoryURL *url = ephy_history_url_new (NULL, NULL, 0, 0, 0); + EphyHistoryURL *url = ephy_history_url_new (NULL, NULL, 0, 0, 0); - gtk_tree_model_get_iter (model, &iter, path); + gtk_tree_model_get_iter (model, &iter, path); - gtk_tree_model_get (model, &iter, - COLUMN_NAME, &url->title, - COLUMN_LOCATION, &url->url, - -1); - return url; + gtk_tree_model_get (model, &iter, + COLUMN_NAME, &url->title, + COLUMN_LOCATION, &url->url, + -1); + return url; } static void get_selection_foreach (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - gpointer *data) + GtkTreePath *path, + GtkTreeIter *iter, + gpointer *data) { - EphyHistoryURL *url; + EphyHistoryURL *url; - url = get_url_from_path (model, path); - *data = g_list_prepend (*data, url); + url = get_url_from_path (model, path); + *data = g_list_prepend (*data, url); } static GList * get_selection (EphyHistoryWindow *self) { - GList *list = NULL; + GList *list = NULL; - gtk_tree_selection_selected_foreach (self->tree_selection, - (GtkTreeSelectionForeachFunc) get_selection_foreach, - &list); + gtk_tree_selection_selected_foreach (self->tree_selection, + (GtkTreeSelectionForeachFunc)get_selection_foreach, + &list); - return g_list_reverse (list); + return g_list_reverse (list); } static void delete_selected (EphyHistoryWindow *self) { - GList *selected; + GList *selected; - selected = get_selection (self); - ephy_history_service_delete_urls (self->history_service, selected, self->cancellable, - (EphyHistoryJobCallback)on_browse_history_deleted_cb, self); + selected = get_selection (self); + ephy_history_service_delete_urls (self->history_service, selected, self->cancellable, + (EphyHistoryJobCallback)on_browse_history_deleted_cb, self); } static void -open_selection (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +open_selection (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - EphyWindow *window; - GList *selection; - GList *l; + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + EphyWindow *window; + GList *selection; + GList *l; - selection = get_selection (self); + selection = get_selection (self); - window = EPHY_WINDOW (get_target_window (self)); - for (l = selection; l; l = l->next) { - EphyHistoryURL *url = l->data; - EphyEmbed *embed; + window = EPHY_WINDOW (get_target_window (self)); + for (l = selection; l; l = l->next) { + EphyHistoryURL *url = l->data; + EphyEmbed *embed; - embed = ephy_shell_new_tab (ephy_shell_get_default (), - window, NULL, EPHY_NEW_TAB_JUMP); - ephy_web_view_load_url (ephy_embed_get_web_view (embed), url->url); - } + embed = ephy_shell_new_tab (ephy_shell_get_default (), + window, NULL, EPHY_NEW_TAB_JUMP); + ephy_web_view_load_url (ephy_embed_get_web_view (embed), url->url); + } - g_list_free_full (selection, (GDestroyNotify) ephy_history_url_free); + g_list_free_full (selection, (GDestroyNotify)ephy_history_url_free); } static void -copy_url (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +copy_url (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - GList *selection; + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + GList *selection; - selection = get_selection (self); + selection = get_selection (self); - if (g_list_length (selection) == 1) { - EphyHistoryURL *url = selection->data; - g_message ("URL %s", url->url); - gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), url->url, -1); - } + if (g_list_length (selection) == 1) { + EphyHistoryURL *url = selection->data; + g_message ("URL %s", url->url); + gtk_clipboard_set_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD), url->url, -1); + } - g_list_free_full (selection, (GDestroyNotify) ephy_history_url_free); + g_list_free_full (selection, (GDestroyNotify)ephy_history_url_free); } static void -bookmark (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +bookmark (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - GList *selection; + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + GList *selection; - selection = get_selection (self); + selection = get_selection (self); - if (g_list_length (selection) == 1) - { - EphyHistoryURL *url; + if (g_list_length (selection) == 1) { + EphyHistoryURL *url; - url = selection->data; + url = selection->data; - ephy_bookmarks_ui_add_bookmark (GTK_WINDOW (self), url->url, url->title); - } + ephy_bookmarks_ui_add_bookmark (GTK_WINDOW (self), url->url, url->title); + } - g_list_free_full (selection, (GDestroyNotify) ephy_history_url_free); + g_list_free_full (selection, (GDestroyNotify)ephy_history_url_free); } static void -forget (GSimpleAction *action, - GVariant *parameter, - gpointer user_data) +forget (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (user_data); - delete_selected (self); + delete_selected (self); } static gboolean on_treeview_key_press_event (GtkWidget *widget, - GdkEventKey *event, - EphyHistoryWindow *self) + GdkEventKey *event, + EphyHistoryWindow *self) { - if (event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_KP_Delete) - { - delete_selected (self); + if (event->keyval == GDK_KEY_Delete || event->keyval == GDK_KEY_KP_Delete) { + delete_selected (self); - return TRUE; - } + return TRUE; + } - return FALSE; + return FALSE; } static void update_popup_menu_actions (GActionGroup *action_group, gboolean only_one_selected_item) { - GAction *copy_url_action; - GAction *bookmark_action; - gboolean bookmarks_locked; + GAction *copy_url_action; + GAction *bookmark_action; + gboolean bookmarks_locked; - copy_url_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-url"); - bookmark_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "bookmark"); - bookmarks_locked = g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN, - EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING); + copy_url_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "copy-url"); + bookmark_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "bookmark"); + bookmarks_locked = g_settings_get_boolean (EPHY_SETTINGS_LOCKDOWN, + EPHY_PREFS_LOCKDOWN_BOOKMARK_EDITING); - g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_url_action), only_one_selected_item); - g_simple_action_set_enabled (G_SIMPLE_ACTION (bookmark_action), (only_one_selected_item && !bookmarks_locked)); + g_simple_action_set_enabled (G_SIMPLE_ACTION (copy_url_action), only_one_selected_item); + g_simple_action_set_enabled (G_SIMPLE_ACTION (bookmark_action), (only_one_selected_item && !bookmarks_locked)); } static gboolean on_treeview_button_press_event (GtkWidget *widget, - GdkEventButton *event, - EphyHistoryWindow *self) + GdkEventButton *event, + EphyHistoryWindow *self) { - if (event->button == 3) { - int n; - GtkWidget *menu; + if (event->button == 3) { + int n; + GtkWidget *menu; - n = gtk_tree_selection_count_selected_rows (self->tree_selection); - if (n <= 0) - return FALSE; + n = gtk_tree_selection_count_selected_rows (self->tree_selection); + if (n <= 0) + return FALSE; - update_popup_menu_actions (self->action_group, (n == 1)); + update_popup_menu_actions (self->action_group, (n == 1)); - menu = gtk_menu_new_from_model (self->treeview_popup_menu_model); - gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL); - gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); - return TRUE; - } + menu = gtk_menu_new_from_model (self->treeview_popup_menu_model); + gtk_menu_attach_to_widget (GTK_MENU (menu), GTK_WIDGET (self), NULL); + gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, event->button, event->time); + return TRUE; + } - return FALSE; + return FALSE; } static void -on_treeview_row_activated (GtkTreeView *view, - GtkTreePath *path, - GtkTreeViewColumn *col, - EphyHistoryWindow *self) +on_treeview_row_activated (GtkTreeView *view, + GtkTreePath *path, + GtkTreeViewColumn *col, + EphyHistoryWindow *self) { - EphyWindow *window; - EphyHistoryURL *url; - EphyEmbed *embed; + EphyWindow *window; + EphyHistoryURL *url; + EphyEmbed *embed; - window = EPHY_WINDOW (get_target_window (self)); - url = get_url_from_path (gtk_tree_view_get_model (view), - path); - g_return_if_fail (url != NULL); + window = EPHY_WINDOW (get_target_window (self)); + url = get_url_from_path (gtk_tree_view_get_model (view), + path); + g_return_if_fail (url != NULL); - embed = ephy_shell_new_tab (ephy_shell_get_default (), - window, NULL, EPHY_NEW_TAB_JUMP); - ephy_web_view_load_url (ephy_embed_get_web_view (embed), url->url); - ephy_history_url_free (url); + embed = ephy_shell_new_tab (ephy_shell_get_default (), + window, NULL, EPHY_NEW_TAB_JUMP); + ephy_web_view_load_url (ephy_embed_get_web_view (embed), url->url); + ephy_history_url_free (url); } static void -on_search_entry_changed (GtkSearchEntry *entry, - EphyHistoryWindow *self) +on_search_entry_changed (GtkSearchEntry *entry, + EphyHistoryWindow *self) { - const char *text; + const char *text; - text = gtk_entry_get_text (GTK_ENTRY (entry)); - g_free (self->search_text); - self->search_text = g_strdup (text); + text = gtk_entry_get_text (GTK_ENTRY (entry)); + g_free (self->search_text); + self->search_text = g_strdup (text); - filter_now (self); + filter_now (self); } static void update_selection_actions (GActionGroup *action_group, gboolean has_selection) { - GAction *forget_action; - GAction *open_selection_action; + GAction *forget_action; + GAction *open_selection_action; - forget_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "forget"); - open_selection_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "open-selection"); + forget_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "forget"); + open_selection_action = g_action_map_lookup_action (G_ACTION_MAP (action_group), "open-selection"); - g_simple_action_set_enabled (G_SIMPLE_ACTION (forget_action), has_selection); - g_simple_action_set_enabled (G_SIMPLE_ACTION (open_selection_action), has_selection); + g_simple_action_set_enabled (G_SIMPLE_ACTION (forget_action), has_selection); + g_simple_action_set_enabled (G_SIMPLE_ACTION (open_selection_action), has_selection); } static void -on_treeview_selection_changed (GtkTreeSelection *selection, - EphyHistoryWindow *self) +on_treeview_selection_changed (GtkTreeSelection *selection, + EphyHistoryWindow *self) { - update_selection_actions (self->action_group, - gtk_tree_selection_count_selected_rows (selection) > 0); + update_selection_actions (self->action_group, + gtk_tree_selection_count_selected_rows (selection) > 0); } static void on_treeview_column_clicked_event (GtkTreeViewColumn *column, - EphyHistoryWindow *self) + EphyHistoryWindow *self) { - GtkTreeViewColumn *previous_sortby; - gint new_sort_column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "column")); + GtkTreeViewColumn *previous_sortby; + gint new_sort_column = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (column), "column")); - if (new_sort_column == self->sort_column) - { - self->sort_ascending = !(self->sort_ascending); - } - else - { - previous_sortby = gtk_tree_view_get_column (GTK_TREE_VIEW (self->treeview), self->sort_column); - gtk_tree_view_column_set_sort_indicator (previous_sortby, FALSE); + if (new_sort_column == self->sort_column) { + self->sort_ascending = !(self->sort_ascending); + } else { + previous_sortby = gtk_tree_view_get_column (GTK_TREE_VIEW (self->treeview), self->sort_column); + gtk_tree_view_column_set_sort_indicator (previous_sortby, FALSE); - self->sort_column = new_sort_column; - self->sort_ascending = self->sort_column == COLUMN_DATE ? FALSE : TRUE; - } + self->sort_column = new_sort_column; + self->sort_ascending = self->sort_column == COLUMN_DATE ? FALSE : TRUE; + } - gtk_tree_view_column_set_sort_order (column, self->sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); - gtk_tree_view_column_set_sort_indicator (column, TRUE); - filter_now (self); + gtk_tree_view_column_set_sort_order (column, self->sort_ascending ? GTK_SORT_ASCENDING : GTK_SORT_DESCENDING); + gtk_tree_view_column_set_sort_indicator (column, TRUE); + filter_now (self); } static gboolean on_urls_visited_cb (EphyHistoryService *service, - EphyHistoryWindow *self) + EphyHistoryWindow *self) { - filter_now (self); + filter_now (self); - return FALSE; + return FALSE; } static void -set_history_service (EphyHistoryWindow *self, - EphyHistoryService *history_service) +set_history_service (EphyHistoryWindow *self, + EphyHistoryService *history_service) { - if (history_service == self->history_service) - return; + if (history_service == self->history_service) + return; - if (self->history_service != NULL) { - g_signal_handlers_disconnect_by_func (self->history_service, - on_urls_visited_cb, - self); - g_clear_object (&self->history_service); - } + if (self->history_service != NULL) { + g_signal_handlers_disconnect_by_func (self->history_service, + on_urls_visited_cb, + self); + g_clear_object (&self->history_service); + } - if (history_service != NULL) { - self->history_service = g_object_ref (history_service); - g_signal_connect_after (self->history_service, - "urls-visited", G_CALLBACK (on_urls_visited_cb), - self); - } + if (history_service != NULL) { + self->history_service = g_object_ref (history_service); + g_signal_connect_after (self->history_service, + "urls-visited", G_CALLBACK (on_urls_visited_cb), + self); + } - filter_now (self); + filter_now (self); } static void -ephy_history_window_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) +ephy_history_window_set_property (GObject *object, + guint prop_id, + const GValue *value, + GParamSpec *pspec) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); - switch (prop_id) - { - case PROP_HISTORY_SERVICE: - set_history_service (self, g_value_get_object (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + switch (prop_id) { + case PROP_HISTORY_SERVICE: + set_history_service (self, g_value_get_object (value)); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void -ephy_history_window_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) +ephy_history_window_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); - switch (prop_id) - { - case PROP_HISTORY_SERVICE: - g_value_set_object (value, self->history_service); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } + switch (prop_id) { + case PROP_HISTORY_SERVICE: + g_value_set_object (value, self->history_service); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } } static void ephy_history_window_dispose (GObject *object) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); - g_free (self->search_text); - self->search_text = NULL; + g_free (self->search_text); + self->search_text = NULL; - if (self->cancellable) - { - g_cancellable_cancel (self->cancellable); - g_clear_object (&self->cancellable); - } + if (self->cancellable) { + g_cancellable_cancel (self->cancellable); + g_clear_object (&self->cancellable); + } - if (self->history_service != NULL) - g_signal_handlers_disconnect_by_func (self->history_service, - on_urls_visited_cb, - self); - g_clear_object (&self->history_service); + if (self->history_service != NULL) + g_signal_handlers_disconnect_by_func (self->history_service, + on_urls_visited_cb, + self); + g_clear_object (&self->history_service); - remove_pending_sorter_source (self); + remove_pending_sorter_source (self); - G_OBJECT_CLASS (ephy_history_window_parent_class)->dispose (object); + G_OBJECT_CLASS (ephy_history_window_parent_class)->dispose (object); } static void ephy_history_window_finalize (GObject *object) { - EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); + EphyHistoryWindow *self = EPHY_HISTORY_WINDOW (object); - if (self->window) - { - GtkWidget **window = &self->window; - g_object_remove_weak_pointer - (G_OBJECT(self->window), - (gpointer *)window); - } + if (self->window) { + GtkWidget **window = &self->window; + g_object_remove_weak_pointer + (G_OBJECT (self->window), + (gpointer *)window); + } - G_OBJECT_CLASS (ephy_history_window_parent_class)->finalize (object); + G_OBJECT_CLASS (ephy_history_window_parent_class)->finalize (object); } static void ephy_history_window_class_init (EphyHistoryWindowClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + GObjectClass *object_class = G_OBJECT_CLASS (klass); + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - object_class->finalize = ephy_history_window_finalize; + object_class->finalize = ephy_history_window_finalize; - object_class->set_property = ephy_history_window_set_property; - object_class->get_property = ephy_history_window_get_property; - object_class->dispose = ephy_history_window_dispose; + object_class->set_property = ephy_history_window_set_property; + object_class->get_property = ephy_history_window_get_property; + object_class->dispose = ephy_history_window_dispose; - obj_properties[PROP_HISTORY_SERVICE] = - g_param_spec_object ("history-service", - "History service", - "History Service", - EPHY_TYPE_HISTORY_SERVICE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); + obj_properties[PROP_HISTORY_SERVICE] = + g_param_spec_object ("history-service", + "History service", + "History Service", + EPHY_TYPE_HISTORY_SERVICE, + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT_ONLY); - g_object_class_install_properties (object_class, LAST_PROP, obj_properties); + g_object_class_install_properties (object_class, LAST_PROP, obj_properties); - gtk_widget_class_set_template_from_resource (widget_class, - "/org/gnome/epiphany/history-dialog.ui"); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, liststore); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, treeview); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, tree_selection); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, date_column); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, name_column); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, location_column); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, date_renderer); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, location_renderer); - gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, treeview_popup_menu_model); + gtk_widget_class_set_template_from_resource (widget_class, + "/org/gnome/epiphany/history-dialog.ui"); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, liststore); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, treeview); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, tree_selection); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, date_column); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, name_column); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, location_column); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, date_renderer); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, location_renderer); + gtk_widget_class_bind_template_child (widget_class, EphyHistoryWindow, treeview_popup_menu_model); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_row_activated); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_key_press_event); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_button_press_event); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_selection_changed); - gtk_widget_class_bind_template_callback (widget_class, on_treeview_column_clicked_event); - gtk_widget_class_bind_template_callback (widget_class, on_search_entry_changed); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_row_activated); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_key_press_event); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_button_press_event); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_selection_changed); + gtk_widget_class_bind_template_callback (widget_class, on_treeview_column_clicked_event); + gtk_widget_class_bind_template_callback (widget_class, on_search_entry_changed); } static void convert_date_data_func (GtkTreeViewColumn *column, - GtkCellRenderer *renderer, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) { - int col_id = GPOINTER_TO_INT (user_data); - int value; - time_t time; - char *friendly; + int col_id = GPOINTER_TO_INT (user_data); + int value; + time_t time; + char *friendly; - gtk_tree_model_get (model, iter, - col_id, - &value, - -1); - time = (time_t) value; + gtk_tree_model_get (model, iter, + col_id, + &value, + -1); + time = (time_t)value; - friendly = ephy_time_helpers_utf_friendly_time (time); - g_object_set (renderer, "text", friendly, NULL); - g_free (friendly); + friendly = ephy_time_helpers_utf_friendly_time (time); + g_object_set (renderer, "text", friendly, NULL); + g_free (friendly); } static void convert_location_data_func (GtkTreeViewColumn *column, - GtkCellRenderer *renderer, - GtkTreeModel *model, - GtkTreeIter *iter, - gpointer user_data) + GtkCellRenderer *renderer, + GtkTreeModel *model, + GtkTreeIter *iter, + gpointer user_data) { - int col_id = GPOINTER_TO_INT (user_data); - char *url; - char *decoded_url; + int col_id = GPOINTER_TO_INT (user_data); + char *url; + char *decoded_url; - gtk_tree_model_get (model, iter, - col_id, - &url, - -1); - decoded_url = ephy_uri_decode (url); + gtk_tree_model_get (model, iter, + col_id, + &url, + -1); + decoded_url = ephy_uri_decode (url); - g_object_set (renderer, "text", decoded_url, NULL); + g_object_set (renderer, "text", decoded_url, NULL); - g_free (url); - g_free (decoded_url); + g_free (url); + g_free (decoded_url); } GtkWidget * ephy_history_window_new (EphyHistoryService *history_service) { - EphyHistoryWindow *self; + EphyHistoryWindow *self; - g_return_val_if_fail (history_service != NULL, NULL); + g_return_val_if_fail (history_service != NULL, NULL); - self = g_object_new (EPHY_TYPE_HISTORY_WINDOW, - "use-header-bar" , TRUE, - "history-service", history_service, - NULL); + self = g_object_new (EPHY_TYPE_HISTORY_WINDOW, + "use-header-bar", TRUE, + "history-service", history_service, + NULL); - return GTK_WIDGET (self); + return GTK_WIDGET (self); } static GActionGroup * create_action_group (EphyHistoryWindow *self) { - const GActionEntry entries[] = { - { "open-selection", open_selection }, - { "copy-url", copy_url }, - { "bookmark", bookmark }, - { "forget", forget }, - { "forget-all", forget_all } - }; - GSimpleActionGroup *group; + const GActionEntry entries[] = { + { "open-selection", open_selection }, + { "copy-url", copy_url }, + { "bookmark", bookmark }, + { "forget", forget }, + { "forget-all", forget_all } + }; + GSimpleActionGroup *group; - group = g_simple_action_group_new (); - g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), self); + group = g_simple_action_group_new (); + g_action_map_add_action_entries (G_ACTION_MAP (group), entries, G_N_ELEMENTS (entries), self); - return G_ACTION_GROUP (group); + return G_ACTION_GROUP (group); } static void ephy_history_window_init (EphyHistoryWindow *self) { - gtk_widget_init_template (GTK_WIDGET (self)); + gtk_widget_init_template (GTK_WIDGET (self)); - self->cancellable = g_cancellable_new (); + self->cancellable = g_cancellable_new (); - self->urls = NULL; - self->sort_ascending = FALSE; - self->sort_column = COLUMN_DATE; - self->sorter_source = 0; + self->urls = NULL; + self->sort_ascending = FALSE; + self->sort_column = COLUMN_DATE; + self->sorter_source = 0; - ephy_gui_ensure_window_group (GTK_WINDOW (self)); + ephy_gui_ensure_window_group (GTK_WINDOW (self)); - g_object_set_data (G_OBJECT (self->date_column), - "column", GINT_TO_POINTER (COLUMN_DATE)); - g_object_set_data (G_OBJECT (self->name_column), - "column", GINT_TO_POINTER (COLUMN_NAME)); - g_object_set_data (G_OBJECT (self->location_column), - "column", GINT_TO_POINTER (COLUMN_LOCATION)); + g_object_set_data (G_OBJECT (self->date_column), + "column", GINT_TO_POINTER (COLUMN_DATE)); + g_object_set_data (G_OBJECT (self->name_column), + "column", GINT_TO_POINTER (COLUMN_NAME)); + g_object_set_data (G_OBJECT (self->location_column), + "column", GINT_TO_POINTER (COLUMN_LOCATION)); - gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (self->date_column), - GTK_CELL_RENDERER (self->date_renderer), - (GtkTreeCellDataFunc) convert_date_data_func, - GINT_TO_POINTER (COLUMN_DATE), - NULL); + gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (self->date_column), + GTK_CELL_RENDERER (self->date_renderer), + (GtkTreeCellDataFunc)convert_date_data_func, + GINT_TO_POINTER (COLUMN_DATE), + NULL); - gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (self->location_column), - GTK_CELL_RENDERER (self->location_renderer), - (GtkTreeCellDataFunc) convert_location_data_func, - GINT_TO_POINTER (COLUMN_LOCATION), - NULL); + gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (self->location_column), + GTK_CELL_RENDERER (self->location_renderer), + (GtkTreeCellDataFunc)convert_location_data_func, + GINT_TO_POINTER (COLUMN_LOCATION), + NULL); - self->action_group = create_action_group (self); - gtk_widget_insert_action_group (GTK_WIDGET (self), "history", self->action_group); + self->action_group = create_action_group (self); + gtk_widget_insert_action_group (GTK_WIDGET (self), "history", self->action_group); - update_selection_actions (self->action_group, FALSE); + update_selection_actions (self->action_group, FALSE); } |