aboutsummaryrefslogtreecommitdiffstats
path: root/src/bookmarks/ephy-bookmark-properties.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bookmarks/ephy-bookmark-properties.c')
-rw-r--r--src/bookmarks/ephy-bookmark-properties.c122
1 files changed, 91 insertions, 31 deletions
diff --git a/src/bookmarks/ephy-bookmark-properties.c b/src/bookmarks/ephy-bookmark-properties.c
index c4a46a9cd..9182462ab 100644
--- a/src/bookmarks/ephy-bookmark-properties.c
+++ b/src/bookmarks/ephy-bookmark-properties.c
@@ -27,6 +27,7 @@
#include "ephy-bookmarks-ui.h"
#include "ephy-topics-entry.h"
#include "ephy-topics-palette.h"
+#include "ephy-node-common.h"
#include "ephy-stock-icons.h"
#include "ephy-debug.h"
#include "ephy-shell.h"
@@ -174,13 +175,13 @@ ephy_bookmark_properties_set_bookmark (EphyBookmarkProperties *properties,
}
static void
-activate_merge_cb (GtkMenuItem *item,
- EphyBookmarkProperties *properties)
+similar_merge_cb (GtkMenuItem *item,
+ EphyBookmarkProperties *properties)
{
EphyBookmarkPropertiesPrivate *priv = properties->priv;
GPtrArray *topics;
EphyNode *node, *topic;
- gint i, j;
+ gint i, j, priority;
GPtrArray *identical = g_ptr_array_new ();
@@ -196,6 +197,11 @@ activate_merge_cb (GtkMenuItem *item,
for (j = 0; j < topics->len; j++)
{
topic = g_ptr_array_index (topics, j);
+
+ priority = ephy_node_get_property_int
+ (topic, EPHY_NODE_KEYWORD_PROP_PRIORITY);
+ if (priority != EPHY_NODE_NORMAL_PRIORITY)
+ continue;
if (ephy_node_has_child (topic, node))
{
@@ -212,25 +218,39 @@ activate_merge_cb (GtkMenuItem *item,
}
static void
-activate_show_cb (GtkMenuItem *item,
- EphyNode *node)
+similar_show_cb (GtkMenuItem *item,
+ EphyNode *node)
{
ephy_bookmarks_ui_show_bookmark (node);
}
static void
-show_duplicate_cb (GtkButton *button,
- EphyBookmarkProperties *properties)
+similar_deactivate_cb (GtkMenuShell *ms,
+ GtkWidget *button)
+{
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), FALSE);
+ gtk_button_released (GTK_BUTTON (button));
+}
+
+static void
+similar_toggled_cb (GtkWidget *button,
+ EphyBookmarkProperties *properties)
{
EphyBookmarkPropertiesPrivate *priv = properties->priv;
EphyNode *node;
GtkMenuShell *menu;
GtkWidget *item, *image;
+ GPtrArray *identical, *similar;
char *label;
gint i;
- GPtrArray *identical = g_ptr_array_new ();
- GPtrArray *similar = g_ptr_array_new ();
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
+ {
+ return;
+ }
+
+ identical = g_ptr_array_new ();
+ similar = g_ptr_array_new ();
ephy_bookmarks_get_similar (priv->bookmarks,
priv->bookmark,
@@ -251,7 +271,7 @@ show_duplicate_cb (GtkButton *button,
g_free (label);
image = gtk_image_new_from_stock (GTK_STOCK_CLEAR, GTK_ICON_SIZE_MENU);
gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item), image);
- g_signal_connect (item, "activate", G_CALLBACK (activate_merge_cb), properties);
+ g_signal_connect (item, "activate", G_CALLBACK (similar_merge_cb), properties);
gtk_widget_show (image);
gtk_widget_show (item);
gtk_menu_shell_append (menu, item);
@@ -267,7 +287,7 @@ show_duplicate_cb (GtkButton *button,
ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_TITLE));
item = gtk_image_menu_item_new_with_label (label);
g_free (label);
- g_signal_connect (item, "activate", G_CALLBACK (activate_show_cb), node);
+ g_signal_connect (item, "activate", G_CALLBACK (similar_show_cb), node);
gtk_widget_show (item);
gtk_menu_shell_append (menu, item);
}
@@ -289,21 +309,56 @@ show_duplicate_cb (GtkButton *button,
ephy_node_get_property_string (node, EPHY_NODE_BMK_PROP_TITLE));
item = gtk_image_menu_item_new_with_label (label);
g_free (label);
- g_signal_connect (item, "activate", G_CALLBACK (activate_show_cb), node);
+ g_signal_connect (item, "activate", G_CALLBACK (similar_show_cb), node);
gtk_widget_show (item);
gtk_menu_shell_append (menu, item);
}
}
+ g_signal_connect_object (menu, "deactivate",
+ G_CALLBACK (similar_deactivate_cb), button, 0);
+
gtk_menu_popup (GTK_MENU (menu), NULL, NULL,
ephy_gui_menu_position_under_widget, button,
- 0, gtk_get_current_event_time ());
+ 1, gtk_get_current_event_time ());
}
g_ptr_array_free (similar, TRUE);
g_ptr_array_free (identical, TRUE);
}
+static gboolean
+similar_release_cb (GtkWidget *button,
+ GdkEventButton *event,
+ EphyBookmarkProperties *properties)
+{
+ if (event->button == 1)
+ {
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON (button), FALSE);
+ }
+
+ return FALSE;
+}
+
+static gboolean
+similar_press_cb (GtkWidget *button,
+ GdkEventButton *event,
+ EphyBookmarkProperties *properties)
+{
+ if (event->button == 1)
+ {
+ if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
+ {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
static void
bookmark_properties_destroy_cb (GtkDialog *dialog,
gpointer data)
@@ -401,15 +456,14 @@ location_entry_changed_cb (GtkWidget *entry,
}
static void
-toggled_cb (GtkToggleButton *button,
- EphyBookmarkProperties *properties)
+list_toggled_cb (GtkToggleButton *button,
+ EphyBookmarkProperties *properties)
{
EphyBookmarkPropertiesPrivate *priv = properties->priv;
GdkGeometry geometry;
if(gtk_toggle_button_get_active (button))
{
- g_object_set (priv->entry, "sensitive", FALSE, NULL);
gtk_widget_show (priv->palette);
geometry.min_width = -1;
@@ -420,7 +474,6 @@ toggled_cb (GtkToggleButton *button,
}
else
{
- g_object_set (priv->entry, "sensitive", TRUE, NULL);
gtk_widget_hide (priv->palette);
geometry.max_height = -1;
@@ -431,7 +484,6 @@ toggled_cb (GtkToggleButton *button,
}
}
-
static void
ephy_bookmark_properties_init (EphyBookmarkProperties *properties)
{
@@ -464,7 +516,6 @@ ephy_bookmark_properties_constructor (GType type,
gtk_window_set_icon_name (window, STOCK_BOOKMARK);
gtk_window_set_type_hint (window, GDK_WINDOW_TYPE_HINT_NORMAL);
- ephy_gui_ensure_window_group (window);
g_signal_connect (properties, "response",
G_CALLBACK (bookmark_properties_response_cb), properties);
@@ -472,11 +523,14 @@ ephy_bookmark_properties_constructor (GType type,
g_signal_connect (properties, "destroy",
G_CALLBACK (bookmark_properties_destroy_cb), properties);
- ephy_state_add_window (widget,
- "bookmark_properties",
- 290, 280, FALSE,
- EPHY_STATE_WINDOW_SAVE_SIZE |
- EPHY_STATE_WINDOW_SAVE_POSITION);
+ if (!priv->creating)
+ {
+ ephy_state_add_window (widget,
+ "bookmark_properties",
+ 290, 280, FALSE,
+ EPHY_STATE_WINDOW_SAVE_POSITION |
+ EPHY_STATE_WINDOW_SAVE_SIZE);
+ }
update_window_title (properties);
@@ -551,14 +605,16 @@ ephy_bookmark_properties_constructor (GType type,
gtk_widget_show (widget);
button = gtk_toggle_button_new_with_label ("");
gtk_button_set_image (GTK_BUTTON (button), widget);
- g_signal_connect (button, "toggled", G_CALLBACK (toggled_cb), properties);
- toggled_cb (GTK_TOGGLE_BUTTON (button), properties);
+ ephy_state_add_toggle (button, "bookmark_properties_list", FALSE);
+ g_signal_connect (button, "toggled", G_CALLBACK (list_toggled_cb), properties);
+ list_toggled_cb (GTK_TOGGLE_BUTTON (button), properties);
gtk_widget_show (button);
gtk_table_attach (GTK_TABLE (table), button, 2, 3, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
- gtk_box_pack_start (GTK_BOX (dialog->vbox), table, TRUE, TRUE, 0);
-
- priv->warning = gtk_button_new ();
+ gtk_box_pack_start (GTK_BOX (dialog->vbox), table, TRUE, TRUE, 0);
+
+ priv->warning = gtk_toggle_button_new ();
+ gtk_button_set_focus_on_click (GTK_BUTTON (priv->warning), FALSE);
gtk_button_set_use_underline (GTK_BUTTON (priv->warning), TRUE);
text = g_strdup_printf (ngettext("%d _Similar", "%d _Similar", 0), 0);
gtk_button_set_label (GTK_BUTTON (priv->warning), text);
@@ -568,8 +624,12 @@ ephy_bookmark_properties_constructor (GType type,
gtk_button_set_image (GTK_BUTTON (priv->warning), widget);
g_object_set (priv->warning, "sensitive", FALSE, NULL);
gtk_widget_show (priv->warning);
- g_signal_connect (priv->warning, "clicked",
- G_CALLBACK(show_duplicate_cb), properties);
+ g_signal_connect (priv->warning, "toggled",
+ G_CALLBACK (similar_toggled_cb), properties);
+ g_signal_connect (priv->warning, "button-press-event",
+ G_CALLBACK (similar_press_cb), properties);
+ g_signal_connect (priv->warning, "button-release-event",
+ G_CALLBACK (similar_release_cb), properties);
gtk_dialog_add_button (dialog,
GTK_STOCK_HELP,