diff options
author | fiaxh <git@mx.ax.lt> | 2017-09-05 23:53:18 +0200 |
---|---|---|
committer | fiaxh <git@mx.ax.lt> | 2017-09-06 00:15:18 +0200 |
commit | 8944029128e3d0f9e32b61e00e880d92fceabb31 (patch) | |
tree | 8cf872969d3349c61278b19273e76c65036c429d /main | |
parent | 312372350e24d1ebd8afbb0029fac04f2b64eb83 (diff) | |
download | dino-8944029128e3d0f9e32b61e00e880d92fceabb31.tar.gz dino-8944029128e3d0f9e32b61e00e880d92fceabb31.zip |
Move encryption menu into ChatInput, PGP support for MUCs
Diffstat (limited to 'main')
-rw-r--r-- | main/CMakeLists.txt | 4 | ||||
-rw-r--r-- | main/data/chat_input.ui | 18 | ||||
-rw-r--r-- | main/data/conversation_summary/message_item.ui | 4 | ||||
-rw-r--r-- | main/data/menu_encryption.ui | 2 | ||||
-rw-r--r-- | main/data/pre_theme.css | 10 | ||||
-rw-r--r-- | main/data/theme.css | 45 | ||||
-rw-r--r-- | main/src/ui/application.vala | 4 | ||||
-rw-r--r-- | main/src/ui/chat_input/encryption_button.vala (renamed from main/src/ui/conversation_titlebar/encryption_entry.vala) | 40 | ||||
-rw-r--r-- | main/src/ui/chat_input/view.vala | 5 | ||||
-rw-r--r-- | main/src/ui/conversation_summary/conversation_item_skeleton.vala | 2 | ||||
-rw-r--r-- | main/src/ui/conversation_summary/conversation_view.vala | 2 | ||||
-rw-r--r-- | main/src/ui/conversation_titlebar/view.vala | 2 | ||||
-rw-r--r-- | main/src/ui/notifications.vala | 1 | ||||
-rw-r--r-- | main/src/ui/unified_window.vala | 1 |
14 files changed, 89 insertions, 51 deletions
diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 44cf3c6a..cd504810 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -47,7 +47,7 @@ set(RESOURCE_LIST settings_dialog.ui unified_window_placeholder.ui - pre_theme.css + theme.css ) compile_gresources( @@ -85,6 +85,7 @@ SOURCES src/ui/add_conversation/select_jid_fragment.vala src/ui/avatar_generator.vala src/ui/chat_input/edit_history.vala + src/ui/chat_input/encryption_button.vala src/ui/chat_input/occupants_tab_completer.vala src/ui/chat_input/smiley_converter.vala src/ui/chat_input/view.vala @@ -107,7 +108,6 @@ SOURCES src/ui/conversation_summary/message_populator.vala src/ui/conversation_summary/message_textview.vala src/ui/conversation_summary/slashme_message_display.vala - src/ui/conversation_titlebar/encryption_entry.vala src/ui/conversation_titlebar/menu_entry.vala src/ui/conversation_titlebar/occupants_entry.vala src/ui/conversation_titlebar/view.vala diff --git a/main/data/chat_input.ui b/main/data/chat_input.ui index 2436ff82..9a8cf424 100644 --- a/main/data/chat_input.ui +++ b/main/data/chat_input.ui @@ -6,6 +6,9 @@ <property name="orientation">horizontal</property> <property name="margin">5</property> <property name="visible">True</property> + <style> + <class name="dino-chatinput"/> + </style> <child> <object class="GtkScrolledWindow" id="scrolled"> <property name="max_content_height">300</property> @@ -15,12 +18,17 @@ <object class="GtkFrame"> <property name="visible">True</property> <child> - <object class="GtkTextView" id="text_input"> - <property name="wrap-mode">GTK_WRAP_WORD_CHAR</property> - <property name="border-width">5</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> + <object class="GtkBox" id="box"> <property name="visible">True</property> + <child> + <object class="GtkTextView" id="text_input"> + <property name="wrap-mode">GTK_WRAP_WORD_CHAR</property> + <property name="border-width">5</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="visible">True</property> + </object> + </child> </object> </child> </object> diff --git a/main/data/conversation_summary/message_item.ui b/main/data/conversation_summary/message_item.ui index 8d53a691..a6937d10 100644 --- a/main/data/conversation_summary/message_item.ui +++ b/main/data/conversation_summary/message_item.ui @@ -38,7 +38,7 @@ </packing> </child> <child> - <object class="GtkImage" id="encryption_image"> + <object class="GtkImage" id="received_image"> <property name="visible">False</property> <property name="xalign">1</property> <property name="valign">start</property> @@ -54,7 +54,7 @@ </packing> </child> <child> - <object class="GtkImage" id="received_image"> + <object class="GtkImage" id="encryption_image"> <property name="visible">False</property> <property name="xalign">1</property> <property name="valign">start</property> diff --git a/main/data/menu_encryption.ui b/main/data/menu_encryption.ui index 7aae53ee..9e63b17d 100644 --- a/main/data/menu_encryption.ui +++ b/main/data/menu_encryption.ui @@ -30,4 +30,4 @@ </packing> </child> </object> -</interface>
\ No newline at end of file +</interface> diff --git a/main/data/pre_theme.css b/main/data/pre_theme.css deleted file mode 100644 index 392e603f..00000000 --- a/main/data/pre_theme.css +++ /dev/null @@ -1,10 +0,0 @@ -/** - * This theme file is applied before the operating system theme and any user configuration. - * It provides sane defaults for things that are very Dino-specific. - */ - -window.dino-main headerbar.dino-left label.title { - opacity: 0; - font-size: 0; - color: transparent; -}
\ No newline at end of file diff --git a/main/data/theme.css b/main/data/theme.css new file mode 100644 index 00000000..d2723d54 --- /dev/null +++ b/main/data/theme.css @@ -0,0 +1,45 @@ +/** + * This theme file is applied after the operating system theme + * It provides sane defaults for things that are very Dino-specific. + */ + +window.dino-main headerbar.dino-left label.title { + opacity: 0; + font-size: 0; + color: transparent; +} + +window.dino-main .dino-chatinput frame box { + background: @theme_base_color; +} + +window.dino-main .dino-chatinput frame box:backdrop { + background: @theme_unfocused_base_color; +} + +window.dino-main button.dino-chatinput-button { + border: none; + background: transparent; + box-shadow: none; + min-height: 0; + padding: 7px 5px; + color: alpha(@theme_fg_color, 0.6); + outline: none; +} + +window.dino-main button.dino-chatinput-button:hover { + color: @theme_selected_bg_color; +} + +window.dino-main button.dino-chatinput-button:backdrop { + color: alpha(@theme_unfocused_fg_color, 0.6); +} + +window.dino-main button.dino-chatinput-button:active, +window.dino-main button.dino-chatinput-button:checked { + color: alpha(@theme_selected_bg_color, 0.8); +} + +window.dino-main button.dino-chatinput-button:checked:backdrop { + color: alpha(@theme_unfocused_selected_bg_color, 0.8); +} diff --git a/main/src/ui/application.vala b/main/src/ui/application.vala index 708c63b0..65bb8743 100644 --- a/main/src/ui/application.vala +++ b/main/src/ui/application.vala @@ -21,8 +21,8 @@ public class Dino.Ui.Application : Gtk.Application, Dino.Application { Window.set_default_icon_name("dino"); CssProvider provider = new CssProvider(); - provider.load_from_resource("/im/dino/pre_theme.css"); - StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider, STYLE_PROVIDER_PRIORITY_THEME - 1); + provider.load_from_resource("/im/dino/theme.css"); + StyleContext.add_provider_for_screen(Gdk.Screen.get_default(), provider, STYLE_PROVIDER_PRIORITY_APPLICATION); activate.connect(() => { if (window == null) { diff --git a/main/src/ui/conversation_titlebar/encryption_entry.vala b/main/src/ui/chat_input/encryption_button.vala index 16cc5fdd..6ae3e8af 100644 --- a/main/src/ui/conversation_titlebar/encryption_entry.vala +++ b/main/src/ui/chat_input/encryption_button.vala @@ -5,32 +5,26 @@ using Dino.Entities; namespace Dino.Ui { -class EncryptionEntry : Plugins.ConversationTitlebarEntry, Object { - public string id { get { return "encryption"; } } - - public double order { get { return 2; } } - public Plugins.ConversationTitlebarWidget get_widget(Plugins.WidgetType type) { - if (type == Plugins.WidgetType.GTK) { - return new EncryptionWidget() { visible=true }; - } - return null; - } -} - -class EncryptionWidget : MenuButton, Plugins.ConversationTitlebarWidget { +public class EncryptionButton : MenuButton { private Conversation? conversation; private RadioButton? button_unencrypted; private Map<RadioButton, Plugins.EncryptionListEntry> encryption_radios = new HashMap<RadioButton, Plugins.EncryptionListEntry>(); - public EncryptionWidget() { + public EncryptionButton() { + relief = ReliefStyle.NONE; + use_popover = true; + image = new Image.from_icon_name("changes-allow-symbolic", IconSize.BUTTON); + get_style_context().add_class("flat"); + Builder builder = new Builder.from_resource("/im/dino/menu_encryption.ui"); - PopoverMenu menu = builder.get_object("menu_encryption") as PopoverMenu; + popover = builder.get_object("menu_encryption") as PopoverMenu; Box encryption_box = builder.get_object("encryption_box") as Box; button_unencrypted = builder.get_object("button_unencrypted") as RadioButton; button_unencrypted.toggled.connect(encryption_changed); + Application app = GLib.Application.get_default() as Application; - foreach(var e in app.plugin_registry.encryption_list_entries) { + foreach (var e in app.plugin_registry.encryption_list_entries) { RadioButton btn = new RadioButton.with_label(button_unencrypted.get_group(), e.name); encryption_radios[btn] = e; btn.toggled.connect(encryption_changed); @@ -38,9 +32,6 @@ class EncryptionWidget : MenuButton, Plugins.ConversationTitlebarWidget { encryption_box.pack_end(btn, false); } clicked.connect(update_encryption_menu_state); - set_use_popover(true); - set_popover(menu); - set_image(new Image.from_icon_name("changes-allow-symbolic", IconSize.BUTTON)); } private void encryption_changed() { @@ -66,13 +57,10 @@ class EncryptionWidget : MenuButton, Plugins.ConversationTitlebarWidget { } private void update_encryption_menu_icon() { - visible = (conversation.type_ == Conversation.Type.CHAT); - if (conversation.type_ == Conversation.Type.CHAT) { - if (conversation.encryption == Encryption.NONE) { - set_image(new Image.from_icon_name("changes-allow-symbolic", IconSize.BUTTON)); - } else { - set_image(new Image.from_icon_name("changes-prevent-symbolic", IconSize.BUTTON)); - } + if (conversation.encryption == Encryption.NONE) { + set_image(new Image.from_icon_name("changes-allow-symbolic", IconSize.BUTTON)); + } else { + set_image(new Image.from_icon_name("changes-prevent-symbolic", IconSize.BUTTON)); } } diff --git a/main/src/ui/chat_input/view.vala b/main/src/ui/chat_input/view.vala index 06e59e54..ef749505 100644 --- a/main/src/ui/chat_input/view.vala +++ b/main/src/ui/chat_input/view.vala @@ -12,6 +12,7 @@ public class View : Box { [GtkChild] private ScrolledWindow scrolled; [GtkChild] private TextView text_input; + [GtkChild] private Box box; public string text { owned get { return text_input.buffer.text; } @@ -25,6 +26,7 @@ public class View : Box { private OccupantsTabCompletor occupants_tab_completor; private SmileyConverter smiley_converter; private EditHistory edit_history; + private EncryptionButton encryption_widget = new EncryptionButton() { yalign=0, visible=true }; public View(StreamInteractor stream_interactor) { this.stream_interactor = stream_interactor; @@ -32,6 +34,8 @@ public class View : Box { smiley_converter = new SmileyConverter(stream_interactor, text_input); edit_history = new EditHistory(text_input, GLib.Application.get_default()); + box.add(encryption_widget); + encryption_widget.get_style_context().add_class("dino-chatinput-button"); scrolled.get_vscrollbar().get_preferred_height(out vscrollbar_min_height, null); scrolled.vadjustment.notify["upper"].connect_after(on_upper_notify); text_input.key_press_event.connect(on_text_input_key_press); @@ -41,6 +45,7 @@ public class View : Box { public void initialize_for_conversation(Conversation conversation) { occupants_tab_completor.initialize_for_conversation(conversation); edit_history.initialize_for_conversation(conversation); + encryption_widget.set_conversation(conversation); if (this.conversation != null) entry_cache[this.conversation] = text_input.buffer.text; this.conversation = conversation; diff --git a/main/src/ui/conversation_summary/conversation_item_skeleton.vala b/main/src/ui/conversation_summary/conversation_item_skeleton.vala index 1eb76840..03114227 100644 --- a/main/src/ui/conversation_summary/conversation_item_skeleton.vala +++ b/main/src/ui/conversation_summary/conversation_item_skeleton.vala @@ -39,7 +39,7 @@ public class ConversationItemSkeleton : Grid { } else { set_title_widget(widget); } - item.notify["mark"].connect_after(update_received); + item.notify["mark"].connect_after(() => { Idle.add(() => { update_received(); return false; }); }); update_received(); } diff --git a/main/src/ui/conversation_summary/conversation_view.vala b/main/src/ui/conversation_summary/conversation_view.vala index 3f5a85b6..dcd24652 100644 --- a/main/src/ui/conversation_summary/conversation_view.vala +++ b/main/src/ui/conversation_summary/conversation_view.vala @@ -98,7 +98,7 @@ public class ConversationView : Box, Plugins.ConversationItemCollection { item.display_time.difference(lower_start_item.display_time) < TimeSpan.MINUTE && lower_start_item.jid.equals(item.jid) && lower_start_item.encryption == item.encryption && - item.mark != Message.Marked.WONTSEND) { + (item.mark == Message.Marked.WONTSEND) == (lower_start_item.mark == Message.Marked.WONTSEND)) { lower_skeleton.add_meta_item(item); force_alloc_width(lower_skeleton, main.get_allocated_width()); item_item_skeletons[item] = lower_skeleton; diff --git a/main/src/ui/conversation_titlebar/view.vala b/main/src/ui/conversation_titlebar/view.vala index 9949f4fc..32d829fb 100644 --- a/main/src/ui/conversation_titlebar/view.vala +++ b/main/src/ui/conversation_titlebar/view.vala @@ -22,7 +22,6 @@ public class ConversationTitlebar : Gtk.HeaderBar { Application app = GLib.Application.get_default() as Application; app.plugin_registry.register_contact_titlebar_entry(new MenuEntry(stream_interactor)); - app.plugin_registry.register_contact_titlebar_entry(new EncryptionEntry()); app.plugin_registry.register_contact_titlebar_entry(new OccupantsEntry(stream_interactor, window)); foreach(var e in app.plugin_registry.conversation_titlebar_entries) { @@ -33,6 +32,7 @@ public class ConversationTitlebar : Gtk.HeaderBar { } } + stream_interactor.get_module(MucManager.IDENTITY).subject_set.connect((account, jid, subject) => { Idle.add(() => { if (conversation != null && conversation.counterpart.equals_bare(jid) && conversation.account.equals(account)) { diff --git a/main/src/ui/notifications.vala b/main/src/ui/notifications.vala index 02f0b1de..470f9d6d 100644 --- a/main/src/ui/notifications.vala +++ b/main/src/ui/notifications.vala @@ -63,6 +63,7 @@ public class Notifications : Object { try { notifications[conversation].show(); } catch (Error error) { } + window.urgency_hint = true; } } diff --git a/main/src/ui/unified_window.vala b/main/src/ui/unified_window.vala index b3c02189..69b530d7 100644 --- a/main/src/ui/unified_window.vala +++ b/main/src/ui/unified_window.vala @@ -126,6 +126,7 @@ public class UnifiedWindow : Window { private bool on_focus_in_event() { stream_interactor.get_module(ChatInteraction.IDENTITY).on_window_focus_in(conversation); + urgency_hint = false; return false; } |