diff --git a/src/client/composer/composer-embed.vala b/src/client/composer/composer-embed.vala index b025d106..d3bf44f3 100644 --- a/src/client/composer/composer-embed.vala +++ b/src/client/composer/composer-embed.vala @@ -4,7 +4,7 @@ * (version 2.1 or later). See the COPYING file in this distribution. */ -public class ComposerEmbed : Gtk.Box, ComposerContainer { +public class ComposerEmbed : Gtk.Bin, ComposerContainer { private ComposerWidget composer; private ConversationViewer conversation_viewer; @@ -17,28 +17,12 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer { public ComposerEmbed(ComposerWidget composer, ConversationViewer conversation_viewer, Geary.Email? referred) { - Object(orientation: Gtk.Orientation.VERTICAL); + //Object(orientation: Gtk.Orientation.VERTICAL); this.composer = composer; this.conversation_viewer = conversation_viewer; halign = Gtk.Align.FILL; valign = Gtk.Align.FILL; - Gtk.Toolbar toolbar = new Gtk.Toolbar(); - toolbar.set_icon_size(Gtk.IconSize.MENU); - Gtk.ToolButton close = new Gtk.ToolButton.from_stock("gtk-close"); - Gtk.ToolButton detach = new Gtk.ToolButton.from_stock("gtk-goto-top"); - Gtk.SeparatorToolItem filler = new Gtk.SeparatorToolItem(); - filler.set_expand(true); - filler.set_draw(false); - toolbar.insert(filler, -1); - toolbar.insert(detach, -1); - toolbar.insert(close, -1); - pack_start(toolbar, false, false); - toolbar.show_all(); - - close.clicked.connect(on_close); - detach.clicked.connect(on_detach); - WebKit.DOM.HTMLElement? email_element = null; if (referred != null) { email_element = conversation_viewer.web_view.get_dom_document().get_element_by_id( @@ -64,7 +48,8 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer { debug("Error creating embed element: %s", error.message); return; } - pack_start(composer, true, true); + //pack_start(composer, true, true); + add(composer); composer.editor.focus_in_event.connect(on_focus_in); composer.editor.focus_out_event.connect(on_focus_out); conversation_viewer.compose_overlay.add_overlay(this); @@ -72,23 +57,16 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer { present(); } - private void on_close() { - if (composer.should_close() == ComposerWidget.CloseStatus.DO_CLOSE) - close(); - } - public void on_detach() { + composer.inline = false; if (composer.editor.has_focus) on_focus_out(); composer.editor.focus_in_event.disconnect(on_focus_in); composer.editor.focus_out_event.disconnect(on_focus_out); - Gtk.Widget focus = top_window.get_focus(); remove(composer); - ComposerWindow window = new ComposerWindow(composer); - ComposerWindow focus_win = focus.get_toplevel() as ComposerWindow; - if (focus_win != null && focus_win == window) - focus.grab_focus(); + new ComposerWindow(composer); + composer.set_focus(); close(); } @@ -125,6 +103,7 @@ public class ComposerEmbed : Gtk.Box, ComposerContainer { public void vanish() { hide(); + composer.inline = false; composer.editor.focus_in_event.disconnect(on_focus_in); composer.editor.focus_out_event.disconnect(on_focus_out); diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala index 277436fb..3b71f2c2 100644 --- a/src/client/composer/composer-widget.vala +++ b/src/client/composer/composer-widget.vala @@ -134,9 +134,7 @@ public class ComposerWidget : Gtk.EventBox { set { ((Gtk.ToggleAction) actions.get_action(ACTION_COMPOSE_AS_HTML)).active = value; } } - public bool inline { - get { return parent is ComposerEmbed && visible; } - } + public bool inline { get; set; default = true; } public ComposeType compose_type { get; private set; default = ComposeType.NEW_MESSAGE; } @@ -158,6 +156,7 @@ public class ComposerWidget : Gtk.EventBox { public Gtk.Entry subject_entry; private Gtk.Button close_button; private Gtk.Button send_button; + private Gtk.Button detach_button; private Gtk.Label message_overlay_label; private WebKit.DOM.Element? prev_selected_link = null; private Gtk.Box attachments_box; @@ -221,6 +220,10 @@ public class ComposerWidget : Gtk.EventBox { close_button.clicked.connect(on_close); send_button = builder.get_object("Send") as Gtk.Button; send_button.clicked.connect(on_send); + detach_button = builder.get_object("Detach") as Gtk.Button; + detach_button.clicked.connect(on_detach); + bind_property("inline", detach_button, "visible", + BindingFlags.DEFAULT | BindingFlags.SYNC_CREATE); add_attachment_button = builder.get_object("add_attachment_button") as Gtk.Button; add_attachment_button.clicked.connect(on_add_attachment_button_clicked); pending_attachments_button = builder.get_object("add_pending_attachments") as Gtk.Button; @@ -519,7 +522,7 @@ public class ComposerWidget : Gtk.EventBox { } } - private void set_focus() { + public void set_focus() { if (Geary.String.is_empty(to)) { to_entry.grab_focus(); } else if (Geary.String.is_empty(subject)) { @@ -730,6 +733,11 @@ public class ComposerWidget : Gtk.EventBox { container.close(); } + private void on_detach() { + if (parent is ComposerEmbed) + ((ComposerEmbed) parent).on_detach(); + } + private bool email_contains_attachment_keywords() { // Filter out all content contained in block quotes string filtered = @"$subject\n"; diff --git a/ui/composer.glade b/ui/composer.glade index ce585a7d..47fc1da7 100644 --- a/ui/composer.glade +++ b/ui/composer.glade @@ -597,6 +597,21 @@ True True + + False + True + 3 + end + 1 + + + + + Detach + True + True + True + False True @@ -618,7 +633,7 @@ True 3 end - 1 + 2