Philipp Hörist pushed to branch master at gajim / gajim
Commits: f8916951 by Sophie Herold at 2018-07-16T22:38:08+02:00 Rework Plugins Dialog
- - - - -
3 changed files:
- gajim/data/gui/plugins_window.ui - gajim/data/style/gajim.css - gajim/plugins/gui.py
Changes:
===================================== gajim/data/gui/plugins_window.ui ===================================== --- a/gajim/data/gui/plugins_window.ui +++ b/gajim/data/gui/plugins_window.ui @@ -1,22 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.20.0 --> +<!-- Generated with glade 3.22.0 --> <interface> - <requires lib="gtk+" version="3.12"/> - <object class="GtkImage" id="image1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-apply</property> - </object> - <object class="GtkImage" id="image2"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-cancel</property> - </object> - <object class="GtkImage" id="image3"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-preferences</property> - </object> + <requires lib="gtk+" version="3.20"/> <object class="GtkWindow" id="plugins_window"> <property name="width_request">650</property> <property name="height_request">500</property> @@ -29,89 +14,126 @@ <signal name="destroy" handler="on_plugins_window_destroy" swapped="no"/> <signal name="key-press-event" handler="on_key_press_event" swapped="no"/> <child> - <object class="GtkBox" id="vbox1"> + <object class="GtkNotebook" id="plugins_notebook"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> + <property name="can_focus">True</property> <child> - <object class="GtkNotebook" id="plugins_notebook"> + <object class="GtkBox"> <property name="visible">True</property> - <property name="can_focus">True</property> - <signal name="switch-page" handler="on_plugins_notebook_switch_page" swapped="no"/> + <property name="can_focus">False</property> + <property name="margin_left">18</property> + <property name="margin_right">18</property> + <property name="margin_top">18</property> + <property name="margin_bottom">18</property> + <property name="spacing">18</property> <child> - <object class="GtkPaned" id="hpaned1"> + <object class="GtkBox" id="vbox6"> + <property name="width_request">200</property> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="position">250</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="vbox6"> - <property name="width_request">150</property> + <object class="GtkScrolledWindow" id="scrolledwindow1"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> + <property name="can_focus">True</property> + <property name="hscrollbar_policy">never</property> + <property name="shadow_type">out</property> <child> - <object class="GtkScrolledWindow" id="scrolledwindow1"> + <object class="GtkTreeView" id="installed_plugins_treeview"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="hscrollbar_policy">never</property> - <child> - <object class="GtkTreeView" id="installed_plugins_treeview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="treeview-selection"/> - </child> - </object> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="treeview-selection"/> </child> + <style> + <class name="space"/> + </style> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkToolbar"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="show_arrow">False</property> + <property name="icon_size">1</property> + <child> + <object class="GtkToolButton" id="install_plugin_button"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Install Plugin from File</property> + <property name="label" translatable="yes">Install from File…</property> + <property name="use_underline">True</property> + <property name="icon_name">document-open-symbolic</property> + <signal name="clicked" handler="on_install_plugin_button_clicked" swapped="no"/> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> + <property name="expand">False</property> + <property name="homogeneous">True</property> </packing> </child> <child> - <object class="GtkButton" id="install_plugin_button"> - <property name="label" translatable="yes">Install from ZIP</property> + <object class="GtkToolButton" id="uninstall_plugin_button"> <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="halign">start</property> - <property name="image">image1</property> - <signal name="clicked" handler="on_install_plugin_button_clicked" swapped="no"/> + <property name="can_focus">False</property> + <property name="tooltip_text" translatable="yes">Uninstall Plugin</property> + <property name="use_underline">True</property> + <property name="icon_name">list-remove-symbolic</property> + <signal name="clicked" handler="on_uninstall_plugin_button_clicked" swapped="no"/> </object> <packing> <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> + <property name="homogeneous">True</property> </packing> </child> + <style> + <class name="inline-toolbar"/> + </style> </object> <packing> - <property name="resize">False</property> - <property name="shrink">False</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="width_request">400</property> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="hexpand">True</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> <child> - <object class="GtkBox" id="vbox2"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="border_width">6</property> - <property name="orientation">vertical</property> - <property name="spacing">6</property> + <property name="hexpand">False</property> + <property name="spacing">18</property> <child> <object class="GtkLabel" id="plugin_name_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label" translatable="yes">&lt;empty&gt;</property> + <property name="halign">start</property> + <property name="label" translatable="yes"><Plugin Name></property> <property name="selectable">True</property> - <property name="xalign">0</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <style> + <class name="large-header"/> + </style> </object> <packing> <property name="expand">False</property> @@ -120,280 +142,242 @@ </packing> </child> <child> - <object class="GtkBox" id="hbox1"> + <object class="GtkButton" id="configure_plugin_button"> <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">6</property> - <child> - <object class="GtkLabel" id="label5"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Version:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Plugin Settings</property> + <signal name="clicked" handler="on_configure_plugin_button_clicked" swapped="no"/> <child> - <object class="GtkLabel" id="plugin_version_label"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label"><empty></property> - <property name="selectable">True</property> - <property name="xalign">0</property> + <property name="icon_name">applications-system-symbolic</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">True</property> + <property name="fill">False</property> + <property name="pack_type">end</property> <property name="position">1</property> </packing> </child> - <child> - <object class="GtkBox" id="hbox2"> - <property name="visible">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkInfoBar" id="available_text"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="no_show_all">True</property> + <property name="message_type">error</property> + <child internal-child="action_area"> + <object class="GtkButtonBox"> <property name="can_focus">False</property> <property name="spacing">6</property> + <property name="layout_style">end</property> <child> - <object class="GtkLabel" id="label4"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Authors:</property> - <property name="yalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> + <placeholder/> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child internal-child="content_area"> + <object class="GtkBox"> + <property name="can_focus">False</property> + <property name="spacing">16</property> <child> - <object class="GtkLabel" id="plugin_authors_label"> + <object class="GtkLabel" id="available_text_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label"><empty></property> + <property name="wrap">True</property> <property name="wrap_mode">word-char</property> - <property name="selectable">True</property> - <property name="ellipsize">end</property> <property name="xalign">0</property> - <property name="yalign">0</property> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> </object> <packing> <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="description"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes"><Description></property> + <property name="wrap">True</property> + <property name="wrap_mode">word-char</property> + <property name="selectable">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="row_spacing">6</property> + <property name="column_spacing">12</property> + <child> + <object class="GtkLabel" id="label5"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="valign">start</property> + <property name="label" translatable="yes">Version</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkBox" id="hbox3"> + <object class="GtkLabel" id="plugin_version_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <child> - <object class="GtkLabel" id="label6"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Homepage:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLinkButton" id="plugin_homepage_linkbutton"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="focus_on_click">False</property> - <property name="receives_default">True</property> - <property name="relief">none</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="halign">start</property> + <property name="label"><empty></property> + <property name="wrap">True</property> + <property name="wrap_mode">word-char</property> + <property name="selectable">True</property> + <property name="xalign">0</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> + <property name="left_attach">1</property> + <property name="top_attach">0</property> </packing> </child> <child> - <object class="GtkBox" id="vbox3"> + <object class="GtkLabel" id="label4"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkBox" id="hbox5"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkLabel" id="label7"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Description:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow" id="scrolledwindow2"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="shadow_type">in</property> - <child> - <placeholder/> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="halign">end</property> + <property name="valign">start</property> + <property name="label" translatable="yes">Authors</property> + <style> + <class name="dim-label"/> + </style> </object> <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">4</property> + <property name="left_attach">0</property> + <property name="top_attach">1</property> </packing> </child> <child> - <object class="GtkButtonBox" id="hbuttonbox3"> + <object class="GtkLabel" id="plugin_authors_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="spacing">5</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="uninstall_plugin_button"> - <property name="label" translatable="yes">Uninstall</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="image">image2</property> - <signal name="clicked" handler="on_uninstall_plugin_button_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="configure_plugin_button"> - <property name="label" translatable="yes">Configure</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="image">image3</property> - <signal name="clicked" handler="on_configure_plugin_button_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> + <property name="halign">start</property> + <property name="label"><empty></property> + <property name="wrap">True</property> + <property name="wrap_mode">word-char</property> + <property name="selectable">True</property> + <property name="lines">10</property> + <property name="xalign">0</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">5</property> + <property name="left_attach">1</property> + <property name="top_attach">1</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="label6"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">end</property> + <property name="valign">start</property> + <property name="label" translatable="yes">Homepage</property> + <style> + <class name="dim-label"/> + </style> + </object> + <packing> + <property name="left_attach">0</property> + <property name="top_attach">2</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="plugin_homepage_linkbutton"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="halign">start</property> + <property name="label" translatable="yes"><empty></property> + <property name="wrap">True</property> + <property name="wrap_mode">word-char</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left_attach">1</property> + <property name="top_attach">2</property> </packing> </child> </object> <packing> - <property name="resize">True</property> - <property name="shrink">False</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> </packing> </child> </object> - </child> - <child type="tab"> - <object class="GtkLabel" id="label1"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Installed</property> - </object> <packing> - <property name="tab_fill">False</property> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> </packing> </child> - <child> - <placeholder/> - </child> - <child type="tab"> - <placeholder/> - </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> - <child> - <object class="GtkButtonBox" id="hbuttonbox1"> + <child type="tab"> + <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="spacing">15</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="close_button"> - <property name="label">gtk-close</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> - <signal name="clicked" handler="on_close_button_clicked" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> + <property name="label" translatable="yes">Installed</property> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> + <property name="tab_fill">False</property> </packing> </child> + <child> + <placeholder/> + </child> + <child type="tab"> + <placeholder/> + </child> </object> </child> + <child type="titlebar"> + <placeholder/> + </child> </object> <object class="GtkTextBuffer" id="textbuffer1"> <property name="text" translatable="yes">Plug-in decription should be displayed here. This text will be erased during PluginsWindow initialization.</property>
===================================== gajim/data/style/gajim.css ===================================== --- a/gajim/data/style/gajim.css +++ b/gajim/data/style/gajim.css @@ -111,14 +111,17 @@ list.settings > row > box { /* Text style */
.bold16 { font-size: 16px; font-weight: bold; } +.large-header { font-size: 20px; font-weight: bold; } .status-away { color: #ff8533;} .status-dnd { color: #e62e00;} .status-online { color: #66bf10;}
/* Treeview */ - treeview.space { padding: 6px; }
+/* GtkLinkButton style */ +button.flat.link { padding: 0; border: 0; } + /*MessageWindow Notebook*/ .notebook-tab-label {min-width: 80px}
===================================== gajim/plugins/gui.py ===================================== --- a/gajim/plugins/gui.py +++ b/gajim/plugins/gui.py @@ -37,7 +37,6 @@ from enum import IntEnum, unique from gajim import gtkgui_helpers from gajim.dialogs import WarningDialog, YesNoDialog from gajim.filechoosers import ArchiveChooserDialog -from gajim.htmltextview import HtmlTextView from gajim.common import app from gajim.common import configpaths from gajim.plugins.helpers import log_calls @@ -68,16 +67,12 @@ class PluginsWindow(object): 'plugin_version_label', 'plugin_authors_label', 'plugin_homepage_linkbutton', 'uninstall_plugin_button', 'configure_plugin_button', 'installed_plugins_treeview', - 'close_button') + 'available_text', 'available_text_label')
for widget_name in widgets_to_extract: setattr(self, widget_name, builder.get_object(widget_name))
- self.plugin_description_textview = HtmlTextView() - self.plugin_description_textview.connect_tooltip() - self.plugin_description_textview.set_wrap_mode(Gtk.WrapMode.WORD) - sw = builder.get_object('scrolledwindow2') - sw.add(self.plugin_description_textview) + self.plugin_description_textview = builder.get_object('description') self.installed_plugins_model = Gtk.ListStore(object, str, bool, bool, GdkPixbuf.Pixbuf) self.installed_plugins_treeview.set_model(self.installed_plugins_model) @@ -116,7 +111,6 @@ class PluginsWindow(object): builder.connect_signals(self)
self.plugins_notebook.set_current_page(0) - self.close_button.grab_focus()
# Adding GUI extension point for Plugins that want to hook the Plugin Window app.plugin_manager.gui_extension_point('plugin_window', self) @@ -128,9 +122,6 @@ class PluginsWindow(object): if event.keyval == Gdk.KEY_Escape: self.window.destroy()
- def on_plugins_notebook_switch_page(self, widget, page, page_num): - GLib.idle_add(self.close_button.grab_focus) - @log_calls('PluginsWindow') def installed_plugins_treeview_selection_changed(self, treeview_selection): model, iter = treeview_selection.get_selected() @@ -144,25 +135,20 @@ class PluginsWindow(object): self.plugin_name_label.set_text(plugin.name) self.plugin_version_label.set_text(plugin.version) self.plugin_authors_label.set_text(plugin.authors) - self.plugin_homepage_linkbutton.set_uri(plugin.homepage) - self.plugin_homepage_linkbutton.set_label(plugin.homepage) - label = self.plugin_homepage_linkbutton.get_children()[0] - label.set_ellipsize(Pango.EllipsizeMode.END) - self.plugin_homepage_linkbutton.set_property('sensitive', True) - - desc_textbuffer = self.plugin_description_textview.get_buffer() - desc_textbuffer.set_text('') - txt = plugin.description - txt.replace('</body>', '') + markup = '<a href="%s">%s</a>' % (plugin.homepage, plugin.homepage) + self.plugin_homepage_linkbutton.set_markup(markup) + if plugin.available_text: - txt += '<br/><br/>' + _('Warning: %s') % plugin.available_text - if not txt.startswith('<body '): - txt = '<body xmlns='http://www.w3.org/1999/xhtml%5C%27%3E' + txt - txt += ' </body>' - self.plugin_description_textview.display_html(txt, - self.plugin_description_textview, None) - - self.plugin_description_textview.set_property('sensitive', True) + text = _('Warning: %s') % plugin.available_text + self.available_text_label.set_text(text) + self.available_text.show() + # Workaround for https://bugzilla.gnome.org/show_bug.cgi?id=710888 + self.available_text.queue_resize() + else: + self.available_text.hide() + + self.plugin_description_textview.set_text(plugin.description) + self.uninstall_plugin_button.set_property( 'sensitive', configpaths.get('PLUGINS_USER') in plugin.__path__) self.configure_plugin_button.set_property( @@ -172,13 +158,9 @@ class PluginsWindow(object): self.plugin_name_label.set_text('') self.plugin_version_label.set_text('') self.plugin_authors_label.set_text('') - self.plugin_homepage_linkbutton.set_uri('') - self.plugin_homepage_linkbutton.set_label('') - self.plugin_homepage_linkbutton.set_property('sensitive', False) + self.plugin_homepage_linkbutton.set_markup('')
- desc_textbuffer = self.plugin_description_textview.get_buffer() - desc_textbuffer.set_text('') - self.plugin_description_textview.set_property('sensitive', False) + self.plugin_description_textview.set_text('') self.uninstall_plugin_button.set_property('sensitive', False) self.configure_plugin_button.set_property('sensitive', False)
@@ -225,10 +207,6 @@ class PluginsWindow(object): del app.interface.instances['plugins']
@log_calls('PluginsWindow') - def on_close_button_clicked(self, widget): - self.window.destroy() - - @log_calls('PluginsWindow') def on_configure_plugin_button_clicked(self, widget): selection = self.installed_plugins_treeview.get_selection() model, iter = selection.get_selected()
View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/f89169517e2ab6a061518962cf3ffb8cbe9...