[geary] Fix composer UI brokenness when compiled under vala 0.36.
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Fix composer UI brokenness when compiled under vala 0.36.
- Date: Sat, 4 Mar 2017 02:45:37 +0000 (UTC)
commit 57ca408c53a91b4d14eea1ffc169c8a7f2f10b93
Author: Michael James Gratton <mike vee net>
Date: Sat Mar 4 13:42:53 2017 +1100
Fix composer UI brokenness when compiled under vala 0.36.
Don't rely ComposerState::state notify and property bindings firing when
the value hasn't actually changed to update the composer's UI. This is
works around Vala Bug 631267 landing.
* src/client/composer/composer-headerbar.vala (ComposerHeaderbar): Add
signal and methods to be called explicity on state changes, rather than
relying on being notified of ComposerWidget::state changing.
* src/client/composer/composer-widget.vala (ComposerWidget): Hook up new
ComposerHeaderbar signal and method. Remove notify and property
bindings on ::state property, move related code to new
::update_composer_view method and call that as needed. Remove
overridden ::show_all, because the UI state should now always be
consistent with ::state. Clean up various methods.
* src/client/composer/email-entry.vala (EmailEntry::EmailEntry): Make
widget visible by default, since we are no longer calling
ComposerWidget::show_all().
* src/client/application/geary-controller.vala: Don't call show all on
new composers, they now manage their visibility properly.
* ui/composer-headerbar.ui: Make toolbar icons visible by default.
* ui/composer-widget.ui: Make toolbar icons visible by default, set Send
button icon here rather than in the class.
src/client/application/geary-controller.vala | 1 -
src/client/composer/composer-headerbar.vala | 33 +++---
src/client/composer/composer-widget.vala | 146 ++++++++++++++------------
src/client/composer/email-entry.vala | 2 +
ui/composer-headerbar.ui | 12 ++
ui/composer-widget.ui | 18 +++
6 files changed, 125 insertions(+), 87 deletions(-)
---
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index b859fd8..290185b 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -2283,7 +2283,6 @@ public class GearyController : Geary.BaseObject {
}
widget.destroy.connect(on_composer_widget_destroy);
widget.link_activated.connect((uri) => { open_uri(uri); });
- widget.show_all();
// We want to keep track of the open composer windows, so we can allow the user to cancel
// an exit without losing their data.
diff --git a/src/client/composer/composer-headerbar.vala b/src/client/composer/composer-headerbar.vala
index 9debbd0..e2ff91a 100644
--- a/src/client/composer/composer-headerbar.vala
+++ b/src/client/composer/composer-headerbar.vala
@@ -28,20 +28,19 @@ public class ComposerHeaderbar : Gtk.HeaderBar {
private Gtk.Button new_message_attach_button;
[GtkChild]
private Gtk.Box conversation_attach_buttons;
- [GtkChild]
- private Gtk.Button send_button;
- public ComposerHeaderbar(Configuration config) {
- this.config = config;
- recipients_button.clicked.connect(() => { state = ComposerWidget.ComposerState.INLINE; });
+ /** Fired when the user wants to expand a compact composer. */
+ public signal void expand_composer();
- send_button.image = new Gtk.Image.from_icon_name("mail-send-symbolic", Gtk.IconSize.MENU);
+ public ComposerHeaderbar(Configuration config, bool is_compact) {
+ this.config = config;
- bind_property("state", recipients_button, "visible", BindingFlags.SYNC_CREATE,
- (binding, source_value, ref target_value) => {
- target_value = (state == ComposerWidget.ComposerState.INLINE_COMPACT);
- return true;
+ this.recipients_button.set_visible(is_compact);
+ this.recipients_button.clicked.connect(() => {
+ this.recipients_button.hide();
+ expand_composer();
});
+
bind_property("show-pending-attachments", new_message_attach_button, "visible",
BindingFlags.SYNC_CREATE | BindingFlags.INVERT_BOOLEAN);
bind_property("show-pending-attachments", conversation_attach_buttons, "visible",
@@ -49,12 +48,6 @@ public class ComposerHeaderbar : Gtk.HeaderBar {
notify["decoration-layout"].connect(set_detach_button_side);
realize.connect(set_detach_button_side);
- notify["state"].connect((s, p) => {
- if (state == ComposerWidget.ComposerState.DETACHED) {
- notify["decoration-layout"].disconnect(set_detach_button_side);
- detach_start.visible = detach_end.visible = false;
- }
- });
}
public void set_recipients(string label, string tooltip) {
@@ -62,8 +55,14 @@ public class ComposerHeaderbar : Gtk.HeaderBar {
recipients_button.tooltip_text = tooltip;
}
+ public void detached() {
+ notify["decoration-layout"].disconnect(set_detach_button_side);
+ this.recipients_button.hide();
+ this.detach_start.visible = this.detach_end.visible = false;
+ }
+
private void set_detach_button_side() {
- if(config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
+ if (config.desktop_environment == Configuration.DesktopEnvironment.UNITY) {
detach_start.visible = false;
detach_end.visible = true;
} else {
diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala
index d65b3cb..509ab5b 100644
--- a/src/client/composer/composer-widget.vala
+++ b/src/client/composer/composer-widget.vala
@@ -372,9 +372,8 @@ public class ComposerWidget : Gtk.EventBox {
public ComposerWidget(Geary.Account account, ComposeType compose_type, Configuration config) {
- this.config = config;
- this.header = new ComposerHeaderbar(config);
this.account = account;
+ this.config = config;
this.compose_type = compose_type;
if (this.compose_type == ComposeType.NEW_MESSAGE)
this.state = ComposerState.NEW;
@@ -383,6 +382,17 @@ public class ComposerWidget : Gtk.EventBox {
else
this.state = ComposerState.INLINE_COMPACT;
+ this.header = new ComposerHeaderbar(
+ config,
+ this.state == ComposerState.INLINE_COMPACT
+ );
+ this.header.expand_composer.connect(() => {
+ if (this.state == ComposerState.INLINE_COMPACT) {
+ this.state = ComposerState.INLINE;
+ update_composer_view();
+ }
+ });
+
// Setup drag 'n drop
const Gtk.TargetEntry[] target_entries = { { URI_LIST_MIME_TYPE, 0, 0 } };
Gtk.drag_dest_set(this, Gtk.DestDefaults.MOTION | Gtk.DestDefaults.HIGHLIGHT,
@@ -391,18 +401,6 @@ public class ComposerWidget : Gtk.EventBox {
add_events(Gdk.EventMask.KEY_PRESS_MASK | Gdk.EventMask.KEY_RELEASE_MASK);
this.visible_on_attachment_drag_over.remove(this.visible_on_attachment_drag_over_child);
- bind_property("state", recipients, "visible", BindingFlags.SYNC_CREATE,
- (binding, source_value, ref target_value) => {
- target_value = (this.state != ComposerState.INLINE_COMPACT);
- return true;
- });
- BindingTransformFunc bind_not_inline = (binding, source_value, ref target_value) => {
- target_value = (this.state != ComposerState.INLINE && state != ComposerState.PANED);
- return true;
- };
- bind_property("state", this.subject_label, "visible", BindingFlags.SYNC_CREATE, bind_not_inline);
- bind_property("state", this.subject_entry, "visible", BindingFlags.SYNC_CREATE, bind_not_inline);
- notify["state"].connect((s, p) => { update_from_field(); });
BindingTransformFunc set_toolbar_text = (binding, source_value, ref target_value) => {
if (draft_save_text == "" && can_delete_quote)
@@ -463,7 +461,6 @@ public class ComposerWidget : Gtk.EventBox {
});
embed_header();
- bind_property("state", this.header, "state", BindingFlags.SYNC_CREATE | BindingFlags.BIDIRECTIONAL);
// Listen to account signals to update from menu.
Geary.Engine.instance.account_available.connect(() => {
@@ -514,6 +511,8 @@ public class ComposerWidget : Gtk.EventBox {
chain.append(this.composer_toolbar);
chain.append(this.attachments_box);
this.composer_container.set_focus_chain(chain);
+
+ update_composer_view();
}
public override void destroy() {
@@ -595,9 +594,11 @@ public class ComposerWidget : Gtk.EventBox {
}
}
- set_header_recipients();
- update_from_field();
- update_pending_attachments(this.pending_include, true);
+ if (this.state == ComposerState.INLINE_COMPACT)
+ set_compact_header_recipients();
+
+ update_composer_view();
+ update_attachments_view();
string signature = yield load_signature(cancellable);
this.editor.load_html(
@@ -999,14 +1000,6 @@ public class ComposerWidget : Gtk.EventBox {
return email;
}
- public override void show_all() {
- base.show_all();
- // Now, hide elements that we don't want shown
- update_from_field();
- this.state = this.state; // Triggers visibilities
- show_attachments();
- }
-
public void change_compose_type(ComposeType new_type, Geary.Email? referred = null,
string? quote = null) {
if (referred != null && quote != null && quote != this.last_quote) {
@@ -1018,7 +1011,14 @@ public class ComposerWidget : Gtk.EventBox {
if (!referred_ids.contains(referred.id)) {
add_recipients_and_ids(new_type, referred);
- ensure_paned();
+
+ if (this.state != ComposerState.PANED &&
+ this.state != ComposerState.DETACHED) {
+ this.state = ComposerWidget.ComposerState.PANED;
+ // XXX move the two lines below to the controller
+ this.container.remove_composer();
+ GearyApplication.instance.controller.main_window.conversation_viewer.do_compose(this);
+ }
}
} else if (new_type != this.compose_type) {
bool recipients_modified = this.to_entry.modified || this.cc_entry.modified ||
this.bcc_entry.modified;
@@ -1055,6 +1055,7 @@ public class ComposerWidget : Gtk.EventBox {
this.compose_type = new_type;
}
+ update_composer_view();
this.container.present();
set_focus();
}
@@ -1184,6 +1185,8 @@ public class ComposerWidget : Gtk.EventBox {
GearyApplication.instance.config.compose_as_html);
this.state = ComposerWidget.ComposerState.DETACHED;
+ this.header.detached();
+ update_composer_view();
if (focus != null && focus.parent.visible) {
ComposerWindow focus_win = focus.get_toplevel() as ComposerWindow;
if (focus_win != null && focus_win == window)
@@ -1193,15 +1196,6 @@ public class ComposerWidget : Gtk.EventBox {
}
}
- public void ensure_paned() {
- if (this.state == ComposerState.PANED || this.state == ComposerState.DETACHED)
- return;
- this.container.remove_composer();
- GearyApplication.instance.controller.main_window.conversation_viewer
- .do_compose(this);
- this.state = ComposerWidget.ComposerState.PANED;
- }
-
public void embed_header() {
if (this.header.parent == null) {
this.header_area.add(this.header);
@@ -1221,6 +1215,20 @@ public class ComposerWidget : Gtk.EventBox {
return check_send_on_return(event) && base.key_press_event(event);
}
+ // Updates the composer's UI after its state has changed
+ private void update_composer_view() {
+ this.recipients.set_visible(this.state != ComposerState.INLINE_COMPACT);
+
+ bool not_inline = (this.state != ComposerState.INLINE &&
+ this.state != ComposerState.INLINE_COMPACT);
+ this.subject_label.set_visible(not_inline);
+ this.subject_entry.set_visible(not_inline);
+
+ this.header.state = this.state;
+
+ update_from_field();
+ }
+
private async bool should_send() {
bool has_subject = !Geary.String.is_empty(subject.strip());
bool has_attachment = this.attached_files.size > 0;
@@ -1433,6 +1441,15 @@ public class ComposerWidget : Gtk.EventBox {
this.container.close_container();
}
+ private void update_attachments_view() {
+ if (this.attached_files.size > 0 )
+ attachments_box.show_all();
+ else
+ attachments_box.hide();
+
+ update_pending_attachments(this.pending_include, true);
+ }
+
// Both adds pending attachments and updates the UI if there are
// any that were left out, that could have been added manually.
private void update_pending_attachments(AttachPending include, bool do_add) {
@@ -1515,7 +1532,7 @@ public class ComposerWidget : Gtk.EventBox {
box.pack_start(remove_button, false, false);
remove_button.clicked.connect(() => remove_attachment(target, box));
- show_attachments();
+ update_attachments_view();
}
private void add_inline_part(File target, string content_id)
@@ -1588,16 +1605,7 @@ public class ComposerWidget : Gtk.EventBox {
}
}
- show_attachments();
- }
-
- private void show_attachments() {
- if (this.attached_files.size > 0 )
- attachments_box.show_all();
- else
- attachments_box.hide();
-
- update_pending_attachments(this.pending_include, true);
+ update_attachments_view();
}
private bool check_send_on_return(Gdk.EventKey event) {
@@ -1626,27 +1634,25 @@ public class ComposerWidget : Gtk.EventBox {
get_action(ACTION_SEND).set_enabled(this.to_entry.valid || this.cc_entry.valid ||
this.bcc_entry.valid);
}
- private void set_header_recipients() {
- if (this.state == ComposerState.INLINE_COMPACT) {
- bool tocc = !this.to_entry.empty && !this.cc_entry.empty,
- ccbcc = !(this.to_entry.empty && this.cc_entry.empty) && !this.bcc_entry.empty;
- string label = this.to_entry.buffer.text + (tocc ? ", " : "")
- + this.cc_entry.buffer.text + (ccbcc ? ", " : "") + this.bcc_entry.buffer.text;
- StringBuilder tooltip = new StringBuilder();
- if (to_entry.addresses != null)
- foreach(Geary.RFC822.MailboxAddress addr in this.to_entry.addresses)
- tooltip.append(_("To: ") + addr.get_full_address() + "\n");
- if (cc_entry.addresses != null)
- foreach(Geary.RFC822.MailboxAddress addr in this.cc_entry.addresses)
- tooltip.append(_("Cc: ") + addr.get_full_address() + "\n");
- if (bcc_entry.addresses != null)
- foreach(Geary.RFC822.MailboxAddress addr in this.bcc_entry.addresses)
- tooltip.append(_("Bcc: ") + addr.get_full_address() + "\n");
- if (reply_to_entry.addresses != null)
- foreach(Geary.RFC822.MailboxAddress addr in this.reply_to_entry.addresses)
- tooltip.append(_("Reply-To: ") + addr.get_full_address() + "\n");
- this.header.set_recipients(label, tooltip.str.slice(0, -1)); // Remove trailing \n
- }
+ private void set_compact_header_recipients() {
+ bool tocc = !this.to_entry.empty && !this.cc_entry.empty,
+ ccbcc = !(this.to_entry.empty && this.cc_entry.empty) && !this.bcc_entry.empty;
+ string label = this.to_entry.buffer.text + (tocc ? ", " : "")
+ + this.cc_entry.buffer.text + (ccbcc ? ", " : "") + this.bcc_entry.buffer.text;
+ StringBuilder tooltip = new StringBuilder();
+ if (to_entry.addresses != null)
+ foreach(Geary.RFC822.MailboxAddress addr in this.to_entry.addresses)
+ tooltip.append(_("To: ") + addr.get_full_address() + "\n");
+ if (cc_entry.addresses != null)
+ foreach(Geary.RFC822.MailboxAddress addr in this.cc_entry.addresses)
+ tooltip.append(_("Cc: ") + addr.get_full_address() + "\n");
+ if (bcc_entry.addresses != null)
+ foreach(Geary.RFC822.MailboxAddress addr in this.bcc_entry.addresses)
+ tooltip.append(_("Bcc: ") + addr.get_full_address() + "\n");
+ if (reply_to_entry.addresses != null)
+ foreach(Geary.RFC822.MailboxAddress addr in this.reply_to_entry.addresses)
+ tooltip.append(_("Reply-To: ") + addr.get_full_address() + "\n");
+ this.header.set_recipients(label, tooltip.str.slice(0, -1)); // Remove trailing \n
}
private void on_justify(SimpleAction action, Variant? param) {
@@ -1750,8 +1756,10 @@ public class ComposerWidget : Gtk.EventBox {
this.reply_to_label.visible =
this.reply_to_entry.visible = show_extended;
- if (show_extended && this.state == ComposerState.INLINE_COMPACT)
+ if (show_extended && this.state == ComposerState.INLINE_COMPACT) {
this.state = ComposerState.INLINE;
+ update_composer_view();
+ }
}
private void on_font_family(SimpleAction action, Variant? param) {
diff --git a/src/client/composer/email-entry.vala b/src/client/composer/email-entry.vala
index 04f27e4..7dab162 100644
--- a/src/client/composer/email-entry.vala
+++ b/src/client/composer/email-entry.vala
@@ -35,6 +35,8 @@ public class EmailEntry : Gtk.Entry {
text = (addresses == null) ? "" : addresses.to_rfc822_string();
updating = false;
});
+
+ show();
}
private void on_changed() {
diff --git a/ui/composer-headerbar.ui b/ui/composer-headerbar.ui
index 888f294..fb0d862 100644
--- a/ui/composer-headerbar.ui
+++ b/ui/composer-headerbar.ui
@@ -1,6 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="3.14"/>
+ <object class="GtkImage" id="send_image">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="icon_name">mail-send-symbolic</property>
+ </object>
<template class="ComposerHeaderbar" parent="GtkHeaderBar">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -46,6 +51,7 @@
<property name="tooltip_text" translatable="yes">Attach File (Ctrl+T)</property>
<child>
<object class="GtkImage" id="new_message_attach_image">
+ <property name="visible">True</property>
<property name="icon_name">mail-attachment-symbolic</property>
<property name="pixel-size">16</property>
</object>
@@ -69,6 +75,7 @@
<property name="tooltip_text" translatable="yes">Attach File (Ctrl+T)</property>
<child>
<object class="GtkImage" id="conversation_attach_new_image">
+ <property name="visible">True</property>
<property name="icon_name">mail-attachment-symbolic</property>
<property name="pixel-size">16</property>
</object>
@@ -85,6 +92,7 @@
<property name="tooltip_text" translatable="yes">Include Original Attachments</property>
<child>
<object class="GtkImage" id="conversation_attach_original_image">
+ <property name="visible">True</property>
<property name="icon_name">edit-copy-symbolic</property>
<property name="pixel-size">16</property>
</object>
@@ -130,6 +138,7 @@
<property name="tooltip_text" translatable="yes">Detach (Ctrl+D)</property>
<child>
<object class="GtkImage" id="detach_end_image">
+ <property name="visible">True</property>
<property name="icon_name">detach-symbolic</property>
<property name="pixel-size">16</property>
</object>
@@ -148,6 +157,7 @@
<property name="focus_on_click">False</property>
<property name="action_name">cmh.send</property>
<property name="always_show_image">True</property>
+ <property name="image">send_image</property>
<property name="use_underline">True</property>
<property name="tooltip_text" translatable="yes">Send (Ctrl+Enter)</property>
<property name="label" translatable="yes">_Send</property>
@@ -176,6 +186,7 @@
<property name="tooltip_text" translatable="yes">Discard and Close</property>
<child>
<object class="GtkImage" id="discard_and_close_image">
+ <property name="visible">True</property>
<property name="icon_name">user-trash-symbolic</property>
<property name="pixel-size">16</property>
</object>
@@ -192,6 +203,7 @@
<property name="tooltip_text" translatable="yes">Save and Close</property>
<child>
<object class="GtkImage" id="save_and_close_image">
+ <property name="visible">True</property>
<property name="icon_name">document-save-symbolic</property>
<property name="pixel-size">16</property>
</object>
diff --git a/ui/composer-widget.ui b/ui/composer-widget.ui
index 0167f3c..50fd22e 100644
--- a/ui/composer-widget.ui
+++ b/ui/composer-widget.ui
@@ -349,6 +349,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">edit-undo-symbolic</property>
@@ -372,6 +373,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">edit-redo-symbolic</property>
@@ -400,6 +402,7 @@
<property name="can_focus">False</property>
<child>
<object class="GtkToggleButton" id="bold_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -408,6 +411,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="bold_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-text-bold-symbolic</property>
@@ -422,6 +426,7 @@
</child>
<child>
<object class="GtkToggleButton" id="italics_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -430,6 +435,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="italics_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-text-italic-symbolic</property>
@@ -444,6 +450,7 @@
</child>
<child>
<object class="GtkToggleButton" id="underline_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -452,6 +459,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="underline_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-text-underline-symbolic</property>
@@ -466,6 +474,7 @@
</child>
<child>
<object class="GtkToggleButton" id="strikethrough_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -474,6 +483,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="strikethrough_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-text-strikethrough-symbolic</property>
@@ -511,6 +521,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="indent_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-indent-more-symbolic</property>
@@ -534,6 +545,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="outdent_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-indent-less-symbolic</property>
@@ -562,6 +574,7 @@
<property name="can_focus">False</property>
<child>
<object class="GtkButton" id="insert_link_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -570,6 +583,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="insert_link_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">insert-link-symbolic</property>
@@ -584,6 +598,7 @@
</child>
<child>
<object class="GtkButton" id="insert_image_button">
+ <property name="visible">True</property>
<property name="can_focus">True</property>
<property name="focus_on_click">False</property>
<property name="receives_default">False</property>
@@ -592,6 +607,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">insert-image-symbolic</property>
@@ -625,6 +641,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="remove_format_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">format-text-remove-symbolic</property>
@@ -648,6 +665,7 @@
<property name="always_show_image">True</property>
<child>
<object class="GtkImage" id="select_dictionary_image">
+ <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="pixel_size">16</property>
<property name="icon_name">accessories-dictionary-symbolic</property>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]