diff options
author | Marco Pesenti Gritti <marco@it.gnome.org> | 2003-02-23 10:20:51 +0800 |
---|---|---|
committer | Marco Pesenti Gritti <mpeseng@src.gnome.org> | 2003-02-23 10:20:51 +0800 |
commit | db0e48d09abcc0134efac3ce2717c42a216b18e3 (patch) | |
tree | b44b835ecd180d5efc0d3822613837c0c95131a5 /lib/widgets/ephy-editable-toolbar.c | |
parent | 6fb4ac671cbcfdd90fffb7752f3fdce8f80cc30e (diff) | |
download | gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.gz gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.bz2 gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.lz gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.xz gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.tar.zst gsoc2013-epiphany-db0e48d09abcc0134efac3ce2717c42a216b18e3.zip |
Update location entry with the urls selected on the drop down. Implement
2003-02-23 Marco Pesenti Gritti <marco@it.gnome.org>
* lib/widgets/ephy-autocompletion-window.c:
(ephy_autocompletion_window_class_init),
(ephy_autocompletion_window_key_press_hack):
* lib/widgets/ephy-autocompletion-window.h:
* lib/widgets/ephy-editable-toolbar.c: (drag_data_delete_cb),
(drag_data_get_cb), (connect_toolbar_drag_source),
(disconnect_toolbar_drag_source), (do_merge), (editor_close_cb),
(button_press_cb), (ephy_editable_toolbar_edit):
* lib/widgets/ephy-location-entry.c: (location_focus_out_cb),
(ephy_location_entry_init), (real_entry_set_location),
(ephy_location_entry_key_press_event_cb),
(ephy_location_entry_activate_cb),
(ephy_location_entry_set_location),
(ephy_location_entry_autocompletion_window_url_selected_cb),
(ephy_location_entry_set_autocompletion),
(ephy_location_entry_autocompletion_window_url_activated_cb),
(ephy_location_entry_autocompletion_window_hidden_cb),
(ephy_location_entry_edit):
* lib/widgets/ephy-location-entry.h:
* src/ephy-shell.c: (ephy_shell_new_tab):
* src/ephy-window.c: (add_widget):
* src/toolbar.c: (toolbar_edit_location):
* src/toolbar.h:
Update location entry with the urls selected on the drop down.
Implement editing mode in location entry == when the user is typing
an url try to do not disturb (mozilla still grab the focus damnit).
Dont put the homepage url in the location. I'm not sure if this is
a good behavior for normal urls (I dont see problems, but please
prove me wrong), but for about:blank it's needed.
Diffstat (limited to 'lib/widgets/ephy-editable-toolbar.c')
-rwxr-xr-x | lib/widgets/ephy-editable-toolbar.c | 92 |
1 files changed, 85 insertions, 7 deletions
diff --git a/lib/widgets/ephy-editable-toolbar.c b/lib/widgets/ephy-editable-toolbar.c index eddb39bd9..9861f4bf4 100755 --- a/lib/widgets/ephy-editable-toolbar.c +++ b/lib/widgets/ephy-editable-toolbar.c @@ -258,8 +258,22 @@ drag_data_delete_cb (GtkWidget *widget, g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); node = (EphyToolbarsItem *)g_object_get_data (G_OBJECT (widget), "item_data"); - g_return_if_fail (node != NULL); - ephy_toolbars_group_remove_item (etoolbar->priv->group, node); + if (node) + { + ephy_toolbars_group_remove_item (etoolbar->priv->group, node); + } + else + { + EphyToolbarsToolbar *toolbar; + GtkWidget *child = GTK_BIN (widget)->child; + + g_return_if_fail (child != NULL); + toolbar = (EphyToolbarsToolbar *)g_object_get_data + (G_OBJECT (child), "toolbar_data"); + g_return_if_fail (toolbar != NULL); + + ephy_toolbars_group_remove_toolbar (etoolbar->priv->group, toolbar); + } etoolbar->priv->toolbars_dirty = TRUE; queue_ui_update (etoolbar); @@ -279,7 +293,7 @@ drag_data_get_cb (GtkWidget *widget, g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); action = EGG_ACTION (g_object_get_data (G_OBJECT (widget), "egg-action")); - target = action->name; + target = action ? action->name : "Toolbar"; LOG ("Drag data get %s", action->name); @@ -352,6 +366,49 @@ disconnect_item_drag_source (EphyToolbarsItem *item, EphyEditableToolbar *etoolb } static void +connect_toolbar_drag_source (EphyToolbarsToolbar *toolbar, EphyEditableToolbar *etoolbar) +{ + GtkWidget *widget; + + g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); + g_return_if_fail (toolbar != NULL); + + widget = get_item_widget (etoolbar, toolbar); + + if (!g_object_get_data (G_OBJECT (widget), "drag_source_set")) + { + g_object_set_data (G_OBJECT (widget), "drag_source_set", + GINT_TO_POINTER (TRUE)); + g_signal_connect (widget->parent, "drag_data_get", + G_CALLBACK (drag_data_get_cb), + etoolbar); + g_signal_connect (widget->parent, "drag_data_delete", + G_CALLBACK (drag_data_delete_cb), + etoolbar); + } +} + +static void +disconnect_toolbar_drag_source (EphyToolbarsToolbar *toolbar, EphyEditableToolbar *etoolbar) +{ + GtkWidget *widget; + + g_return_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar)); + g_return_if_fail (toolbar != NULL); + + widget = get_item_widget (etoolbar, toolbar); + + if (g_object_get_data (G_OBJECT (widget), "drag_source_set")) + { + g_object_set_data (G_OBJECT (widget), "drag_source_set", + GINT_TO_POINTER (FALSE)); + g_signal_handlers_disconnect_by_func (widget->parent, + G_CALLBACK (drag_data_delete_cb), + etoolbar); + } +} + +static void setup_toolbar (EphyToolbarsToolbar *toolbar, EphyEditableToolbar *etoolbar) { GtkWidget *widget; @@ -470,6 +527,9 @@ do_merge (EphyEditableToolbar *t) ephy_toolbars_group_foreach_item (t->priv->group, (EphyToolbarsGroupForeachItemFunc) connect_item_drag_source, t); + ephy_toolbars_group_foreach_toolbar (t->priv->group, + (EphyToolbarsGroupForeachToolbarFunc) + connect_toolbar_drag_source, t); } ephy_toolbars_group_foreach_toolbar (t->priv->group, @@ -733,6 +793,10 @@ editor_close_cb (GtkWidget *button, EphyEditableToolbar *etoolbar) (EphyToolbarsGroupForeachItemFunc) disconnect_item_drag_source, etoolbar); + ephy_toolbars_group_foreach_toolbar (etoolbar->priv->group, + (EphyToolbarsGroupForeachToolbarFunc) + disconnect_toolbar_drag_source, + etoolbar); hide_editor (etoolbar); } @@ -975,19 +1039,29 @@ button_press_cb (GtkWidget *w, EphyEditableToolbar *etoolbar) { GtkWidget *widget; - GtkWidget *toolitem; + GtkWidget *drag_widget; + GtkWidget *child; g_return_val_if_fail (IS_EPHY_EDITABLE_TOOLBAR (etoolbar), FALSE); widget = gtk_get_event_widget (event); - toolitem = gtk_widget_get_ancestor (widget, EGG_TYPE_TOOL_ITEM); + child = GTK_BIN (widget)->child; + + if (EGG_IS_TOOLBAR (child)) + { + drag_widget = widget; + } + else + { + drag_widget = gtk_widget_get_ancestor (widget, EGG_TYPE_TOOL_ITEM); + } - if (toolitem == NULL) return FALSE; + if (drag_widget == NULL) return FALSE; switch (event->type) { case GDK_BUTTON_PRESS: - gtk_drag_begin (toolitem, + gtk_drag_begin (drag_widget, gtk_target_list_new (source_drag_types, 1), GDK_ACTION_MOVE, 1, event); return TRUE; @@ -1038,6 +1112,10 @@ ephy_editable_toolbar_edit (EphyEditableToolbar *etoolbar) ephy_toolbars_group_foreach_item (etoolbar->priv->group, (EphyToolbarsGroupForeachItemFunc) connect_item_drag_source, etoolbar); + ephy_toolbars_group_foreach_toolbar (etoolbar->priv->group, + (EphyToolbarsGroupForeachToolbarFunc) + connect_toolbar_drag_source, + etoolbar); ephy_toolbars_group_foreach_item (etoolbar->priv->group, (EphyToolbarsGroupForeachItemFunc) set_action_sensitive, etoolbar); |