mirror of
https://github.com/pulb/mailnag.git
synced 2026-06-23 23:01:04 +02:00
Port to GTKApplication, headerbars
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# utils.py
|
||||
#
|
||||
# Copyright 2011 - 2016 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2011 - 2019 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2007 Marco Ferragina <marco.ferragina@gmail.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -109,7 +109,7 @@ def try_call(f, err_retval = None):
|
||||
return err_retval
|
||||
|
||||
|
||||
def shutdown_existing_instance():
|
||||
def shutdown_existing_instance(wait_for_completion = True):
|
||||
bus = dbus.SessionBus()
|
||||
|
||||
if bus.name_has_owner(DBUS_BUS_NAME):
|
||||
@@ -122,8 +122,9 @@ def shutdown_existing_instance():
|
||||
|
||||
shutdown()
|
||||
|
||||
while bus.name_has_owner(DBUS_BUS_NAME):
|
||||
time.sleep(2)
|
||||
if wait_for_completion:
|
||||
while bus.name_has_owner(DBUS_BUS_NAME):
|
||||
time.sleep(2)
|
||||
|
||||
print 'OK'
|
||||
except:
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# accountdialog.py
|
||||
#
|
||||
# Copyright 2011 - 2017 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2011 - 2019 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2016 Timo Kankare <timo.kankare@iki.fi>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -22,6 +22,7 @@
|
||||
# MA 02110-1301, USA.
|
||||
#
|
||||
|
||||
import os
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
gi.require_version('GLib', '2.0')
|
||||
@@ -56,17 +57,24 @@ class AccountDialog:
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(PACKAGE_NAME)
|
||||
builder.add_from_file(get_data_file("account_dialog.ui"))
|
||||
builder.add_from_file(get_data_file("account_widget.ui"))
|
||||
builder.connect_signals({ \
|
||||
"account_type_changed" : self._on_cmb_account_type_changed, \
|
||||
"entry_changed" : self._on_entry_changed, \
|
||||
"expander_folders_activate" : self._on_expander_folders_activate, \
|
||||
"btn_cancel_clicked" : self._on_btn_cancel_clicked, \
|
||||
"btn_save_clicked" : self._on_btn_save_clicked \
|
||||
"expander_folders_activate" : self._on_expander_folders_activate \
|
||||
})
|
||||
|
||||
self._window = builder.get_object("account_dialog")
|
||||
self._window.set_transient_for(parent)
|
||||
self._window = Gtk.Dialog(title = _('Mail Account'), parent = parent, use_header_bar = True, \
|
||||
buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
|
||||
|
||||
self._window.set_default_response(Gtk.ResponseType.OK)
|
||||
self._window.set_default_size(400, 0)
|
||||
|
||||
self._box = self._window.get_content_area()
|
||||
self._box.set_border_width(12)
|
||||
self._box.set_spacing(12)
|
||||
|
||||
self._box.pack_start(builder.get_object("account_widget"), True, True, 0)
|
||||
|
||||
self._cmb_account_type = builder.get_object("cmb_account_type")
|
||||
self._label_account_name = builder.get_object("label_account_name")
|
||||
@@ -89,7 +97,9 @@ class AccountDialog:
|
||||
self._liststore_folders = builder.get_object("liststore_folders")
|
||||
self._chk_account_push = builder.get_object("chk_account_push")
|
||||
self._chk_account_ssl = builder.get_object("chk_account_ssl")
|
||||
self._button_save = builder.get_object("button_save")
|
||||
|
||||
self._button_ok = self._window.get_widget_for_response(Gtk.ResponseType.OK)
|
||||
self._button_ok.set_sensitive(False)
|
||||
|
||||
self._error_label = None
|
||||
self._folders_received = False
|
||||
@@ -115,7 +125,7 @@ class AccountDialog:
|
||||
|
||||
res = self._window.run()
|
||||
|
||||
if res == 1:
|
||||
if res == Gtk.ResponseType.OK:
|
||||
self._configure_account(self._acc)
|
||||
|
||||
self._window.destroy()
|
||||
@@ -143,9 +153,8 @@ class AccountDialog:
|
||||
self._chk_account_push.set_sensitive(len(config['folders']) < 2)
|
||||
if 'ssl' in config:
|
||||
self._chk_account_ssl.set_active(config['ssl'])
|
||||
if 'path' in config:
|
||||
if ('path' in config) and os.path.exists(config.get('path')):
|
||||
self._chooser_account_file_path.set_filename(config.get('path'))
|
||||
if 'path' in config:
|
||||
self._chooser_account_directory_path.set_filename(config.get('path'))
|
||||
|
||||
|
||||
@@ -265,14 +274,6 @@ class AccountDialog:
|
||||
else:
|
||||
is_type_change_allowed = True
|
||||
self._cmb_account_type.set_sensitive(is_type_change_allowed)
|
||||
|
||||
|
||||
def _on_btn_cancel_clicked(self, widget):
|
||||
pass
|
||||
|
||||
|
||||
def _on_btn_save_clicked(self, widget):
|
||||
pass
|
||||
|
||||
|
||||
def _on_entry_changed(self, widget):
|
||||
@@ -296,7 +297,7 @@ class AccountDialog:
|
||||
len(self._entry_account_password.get_text()) > 0
|
||||
|
||||
self._expander_folders.set_sensitive(self._folders_received or ok)
|
||||
self._button_save.set_sensitive(ok)
|
||||
self._button_ok.set_sensitive(ok)
|
||||
|
||||
|
||||
def _on_expander_folders_activate(self, widget):
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# configwindow.py
|
||||
#
|
||||
# Copyright 2011 - 2016 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2011 - 2019 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2011 Ralf Hersel <ralf.hersel@gmx.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
@@ -24,16 +24,15 @@
|
||||
|
||||
import gi
|
||||
gi.require_version('Gtk', '3.0')
|
||||
gi.require_version('GLib', '2.0')
|
||||
|
||||
import os
|
||||
import shutil
|
||||
import xdg.BaseDirectory as bd
|
||||
from gi.repository import GLib, GdkPixbuf, Gdk, Gtk, GObject
|
||||
from gi.repository import Gtk
|
||||
|
||||
from Mailnag.common.dist_cfg import PACKAGE_NAME, APP_VERSION, BIN_DIR, DESKTOP_FILE_DIR
|
||||
from Mailnag.common.i18n import _
|
||||
from Mailnag.common.utils import get_data_file, get_data_paths
|
||||
from Mailnag.common.utils import get_data_file
|
||||
from Mailnag.common.config import read_cfg, write_cfg
|
||||
from Mailnag.common.accounts import Account, AccountManager
|
||||
from Mailnag.common.credentialstore import CredentialStore
|
||||
@@ -43,13 +42,13 @@ from Mailnag.configuration.plugindialog import PluginDialog
|
||||
|
||||
|
||||
class ConfigWindow:
|
||||
def __init__(self):
|
||||
def __init__(self, app):
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain(PACKAGE_NAME)
|
||||
builder.add_from_file(get_data_file("config_window.ui"))
|
||||
builder.connect_signals({ \
|
||||
"config_window_deleted" : self._on_config_window_deleted, \
|
||||
"btn_page_toggled" : self._on_btn_page_toggled, \
|
||||
"btn_info_clicked" : self._on_btn_info_clicked, \
|
||||
"btn_add_account_clicked" : self._on_btn_add_account_clicked, \
|
||||
"btn_edit_account_clicked" : self._on_btn_edit_account_clicked, \
|
||||
"btn_remove_account_clicked" : self._on_btn_remove_account_clicked, \
|
||||
@@ -61,37 +60,13 @@ class ConfigWindow:
|
||||
"treeview_plugins_cursor_changed" : self._on_treeview_plugins_cursor_changed, \
|
||||
})
|
||||
|
||||
# Add icons in alternative data paths (e.g. ./data/icons)
|
||||
# to the icon search path in case Mailnag is launched
|
||||
# from a local directory (without installing).
|
||||
icon_theme = Gtk.IconTheme.get_default()
|
||||
for path in get_data_paths():
|
||||
icon_theme.append_search_path(os.path.join(path, "icons"))
|
||||
|
||||
self._window = builder.get_object("config_window")
|
||||
self._window.set_icon_name("mailnag")
|
||||
self._load_stylesheet('config_window.css')
|
||||
self._window.set_application(app)
|
||||
self._cfg = read_cfg()
|
||||
|
||||
self.daemon_enabled = False
|
||||
self._daemon_enabled = False
|
||||
|
||||
#
|
||||
# toggle buttons / notebook
|
||||
#
|
||||
self._notebook = builder.get_object("notebook")
|
||||
self._box_navigation = builder.get_object("box_navigation")
|
||||
self._box_navigation.get_children()[0].set_active(True)
|
||||
|
||||
#
|
||||
# general page
|
||||
#
|
||||
# The dimension of the png is expected to be 180x180 px
|
||||
pb = GdkPixbuf.Pixbuf.new_from_file(get_data_file("mailnag.png"))
|
||||
pb = pb.new_subpixbuf(0, 10, 180, 146) # crop whitespace at the bottom
|
||||
self._image_logo = builder.get_object("image_logo")
|
||||
self._image_logo.set_from_pixbuf(pb)
|
||||
self._label_app_desc = builder.get_object("label_app_desc")
|
||||
self._label_app_desc.set_markup("<span font=\"24\"><b>Mailnag</b></span>\nVersion %s" % str(APP_VERSION))
|
||||
self._switch_daemon_enabled = builder.get_object("switch_daemon_enabled")
|
||||
|
||||
#
|
||||
@@ -147,17 +122,17 @@ class ConfigWindow:
|
||||
|
||||
# load config
|
||||
self._load_config()
|
||||
self._window.show()
|
||||
self._window.show_all()
|
||||
|
||||
|
||||
def get_gtk_window(self):
|
||||
return self._window
|
||||
|
||||
|
||||
def get_daemon_enabled(self):
|
||||
return self._daemon_enabled
|
||||
|
||||
|
||||
def _load_stylesheet(self, stylesheet):
|
||||
provider = Gtk.CssProvider()
|
||||
provider.load_from_path(get_data_file(stylesheet))
|
||||
Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
|
||||
provider,
|
||||
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
|
||||
|
||||
|
||||
def _load_config(self):
|
||||
self._switch_daemon_enabled.set_active(bool(int(self._cfg.get('core', 'autostart'))))
|
||||
|
||||
@@ -246,7 +221,7 @@ class ConfigWindow:
|
||||
if iter != None:
|
||||
d = AccountDialog(self._window, acc)
|
||||
|
||||
if d.run() == 1:
|
||||
if d.run() == Gtk.ResponseType.OK:
|
||||
model.set_value(iter, 2, acc.name)
|
||||
|
||||
|
||||
@@ -301,19 +276,40 @@ class ConfigWindow:
|
||||
if os.path.exists(autostart_file):
|
||||
os.remove(autostart_file)
|
||||
|
||||
|
||||
def _on_btn_page_toggled(self, button):
|
||||
if not button.get_active(): return
|
||||
|
||||
def _on_btn_info_clicked(self, widget):
|
||||
aboutdialog = Gtk.AboutDialog()
|
||||
aboutdialog.set_title(_("About %s") % PACKAGE_NAME.title())
|
||||
aboutdialog.set_version(APP_VERSION)
|
||||
aboutdialog.set_program_name(PACKAGE_NAME.title())
|
||||
aboutdialog.set_comments(_("An extensible mail notification daemon."))
|
||||
aboutdialog.set_copyright(_("Copyright (c) 2011 - 2019 Patrick Ulbrich and contributors."))
|
||||
aboutdialog.set_logo_icon_name("mailnag")
|
||||
aboutdialog.set_website("https://github.com/pulb/mailnag")
|
||||
aboutdialog.set_website_label(_("Homepage"))
|
||||
aboutdialog.set_license_type(Gtk.License.GPL_2_0)
|
||||
aboutdialog.set_authors([
|
||||
"Patrick Ulbrich (maintainer)",
|
||||
"Edwin Smulders",
|
||||
"Freeroot",
|
||||
"Leighton Earl",
|
||||
"Matthias Mailänder",
|
||||
"Oleg",
|
||||
"Ralf Hersel",
|
||||
"Taylor Braun-Jones",
|
||||
"Thomas Haider",
|
||||
"Timo Kankare",
|
||||
"Vincent Cheng"
|
||||
])
|
||||
aboutdialog.set_translator_credits(_("translator-credits"))
|
||||
aboutdialog.set_artists([ "Reda Lazri" ])
|
||||
aboutdialog.connect("response", lambda w, r: aboutdialog.destroy())
|
||||
|
||||
page = 0
|
||||
for btn in self._box_navigation.get_children():
|
||||
if btn == button:
|
||||
self._notebook.set_current_page(page)
|
||||
else:
|
||||
btn.set_active(False)
|
||||
page += 1
|
||||
|
||||
|
||||
aboutdialog.set_modal(True)
|
||||
aboutdialog.set_transient_for(self._window)
|
||||
aboutdialog.show()
|
||||
|
||||
|
||||
def _on_account_toggled(self, cell, path):
|
||||
model = self._liststore_accounts
|
||||
iter = model.get_iter(path)
|
||||
@@ -327,7 +323,7 @@ class ConfigWindow:
|
||||
acc = Account(enabled = True)
|
||||
d = AccountDialog(self._window, acc)
|
||||
|
||||
if d.run() == 1:
|
||||
if d.run() == Gtk.ResponseType.OK:
|
||||
self._accountman.add(acc)
|
||||
|
||||
row = [acc, acc.enabled, acc.name]
|
||||
@@ -397,14 +393,9 @@ class ConfigWindow:
|
||||
if iter != None:
|
||||
self._button_edit_plugin.set_sensitive(plugin.has_config_ui())
|
||||
|
||||
|
||||
def _save_and_quit(self):
|
||||
self._save_config()
|
||||
self.daemon_enabled = self._switch_daemon_enabled.get_active()
|
||||
Gtk.main_quit()
|
||||
|
||||
|
||||
def _on_config_window_deleted(self, widget, event):
|
||||
self._save_and_quit()
|
||||
self._save_config()
|
||||
self._daemon_enabled = self._switch_daemon_enabled.get_active()
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
# plugindialog.py
|
||||
#
|
||||
# Copyright 2013 - 2016 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2013 - 2019 Patrick Ulbrich <zulu99@gmx.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -32,20 +32,22 @@ class PluginDialog:
|
||||
def __init__(self, parent, plugin):
|
||||
self._plugin = plugin
|
||||
|
||||
flags = Gtk.DialogFlags.MODAL # | Gtk.DialogFlags.USE_HEADER_BAR
|
||||
self._window = Gtk.Dialog(_('Plugin Configuration'), parent, flags, \
|
||||
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
|
||||
self._window = Gtk.Dialog(title = _('Plugin Configuration'), parent = parent, use_header_bar = True, \
|
||||
buttons = (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
|
||||
|
||||
self._window.set_default_response(Gtk.ResponseType.OK)
|
||||
self._window.set_default_size(480, 0)
|
||||
|
||||
self._box = self._window.get_content_area()
|
||||
self._box.set_border_width(6)
|
||||
self._box.set_spacing(6)
|
||||
self._box.set_border_width(12)
|
||||
self._box.set_spacing(12)
|
||||
|
||||
|
||||
def run(self):
|
||||
widget = self._plugin.get_config_ui()
|
||||
|
||||
if widget != None:
|
||||
self._box.add(widget)
|
||||
self._box.pack_start(widget, True, True, 0)
|
||||
widget.show_all()
|
||||
self._plugin.load_ui_from_config(widget)
|
||||
|
||||
|
||||
@@ -1,372 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.20.0 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.6"/>
|
||||
<object class="GtkListStore" id="liststore_folders">
|
||||
<columns>
|
||||
<!-- column-name active -->
|
||||
<column type="gboolean"/>
|
||||
<!-- column-name name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkDialog" id="account_dialog">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">5</property>
|
||||
<property name="title" translatable="yes">Mail Account</property>
|
||||
<property name="resizable">False</property>
|
||||
<property name="modal">True</property>
|
||||
<property name="type_hint">dialog</property>
|
||||
<child internal-child="vbox">
|
||||
<object class="GtkBox" id="dialog-vbox1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">18</property>
|
||||
<child internal-child="action_area">
|
||||
<object class="GtkButtonBox" id="dialog-action_area1">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="layout_style">end</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_cancel">
|
||||
<property name="label">gtk-cancel</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="btn_cancel_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="button_save">
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="clicked" handler="btn_save_clicked" swapped="no"/>
|
||||
</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="pack_type">end</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkGrid" id="grid1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">6</property>
|
||||
<property name="margin_right">6</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<property name="input_purpose">number</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_server">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_user">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="chk_account_push">
|
||||
<property name="label" translatable="yes">Enable Push-IMAP</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="cmb_account_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="changed" handler="account_type_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="chk_account_ssl">
|
||||
<property name="label" translatable="yes">Enable SSL encryption</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Accountname:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Account type:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_user">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">User:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Password:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_server">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Server:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Port:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkExpander" id="expander_folders">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<signal name="activate" handler="expander_folders_activate" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkOverlay" id="overlay">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_height">100</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_folders">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">liststore_folders</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection4"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Folders (optional)</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_file_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">File path:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="chooser_file_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="create_folders">False</property>
|
||||
<property name="preview_widget_active">False</property>
|
||||
<property name="show_hidden">True</property>
|
||||
<property name="use_preview_label">False</property>
|
||||
<property name="title" translatable="yes"/>
|
||||
<signal name="file-set" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_directory_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Directory:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="chooser_directory_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="action">select-folder</property>
|
||||
<property name="create_folders">False</property>
|
||||
<property name="preview_widget_active">False</property>
|
||||
<property name="show_hidden">True</property>
|
||||
<property name="use_preview_label">False</property>
|
||||
<property name="title" translatable="yes"/>
|
||||
<signal name="file-set" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<action-widgets>
|
||||
<action-widget response="0">button_cancel</action-widget>
|
||||
<action-widget response="1">button_save</action-widget>
|
||||
</action-widgets>
|
||||
</object>
|
||||
</interface>
|
||||
305
data/account_widget.ui
Normal file
305
data/account_widget.ui
Normal file
@@ -0,0 +1,305 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.6"/>
|
||||
<object class="GtkGrid" id="account_widget">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_top">6</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<property name="input_purpose">number</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_server">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="visibility">False</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_user">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="entry_account_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="hexpand">True</property>
|
||||
<property name="invisible_char">•</property>
|
||||
<signal name="changed" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="chk_account_push">
|
||||
<property name="label" translatable="yes">Enable Push-IMAP</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">8</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkComboBoxText" id="cmb_account_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<signal name="changed" handler="account_type_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="chk_account_ssl">
|
||||
<property name="label" translatable="yes">Enable SSL encryption</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">False</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">9</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_name">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Accountname:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_type">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Account type:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_user">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">User:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_password">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Password:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_server">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Server:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">4</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_port">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Port:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">5</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkExpander" id="expander_folders">
|
||||
<property name="visible">True</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<signal name="activate" handler="expander_folders_activate" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkOverlay" id="overlay">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<property name="min_content_height">100</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_folders">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">liststore_folders</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="search_column">0</property>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="index">-1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child type="label">
|
||||
<object class="GtkLabel" id="label1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Folders (optional)</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">10</property>
|
||||
<property name="width">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_file_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">File path:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="chooser_file_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="create_folders">False</property>
|
||||
<property name="preview_widget_active">False</property>
|
||||
<property name="show_hidden">True</property>
|
||||
<property name="use_preview_label">False</property>
|
||||
<property name="title" translatable="yes"/>
|
||||
<signal name="file-set" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">6</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_account_directory_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Directory:</property>
|
||||
<property name="xalign">0</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="top_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkFileChooserButton" id="chooser_directory_path">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="action">select-folder</property>
|
||||
<property name="create_folders">False</property>
|
||||
<property name="preview_widget_active">False</property>
|
||||
<property name="show_hidden">True</property>
|
||||
<property name="use_preview_label">False</property>
|
||||
<property name="title" translatable="yes"/>
|
||||
<signal name="file-set" handler="entry_changed" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="top_attach">7</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkListStore" id="liststore_folders">
|
||||
<columns>
|
||||
<!-- column-name active -->
|
||||
<column type="gboolean"/>
|
||||
<!-- column-name name -->
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
</interface>
|
||||
@@ -1,6 +0,0 @@
|
||||
.bg-gradient {
|
||||
background-image: linear-gradient(to bottom,
|
||||
@theme_bg_color,
|
||||
shade(@theme_bg_color, 0.94)
|
||||
12%);
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generated with glade 3.20.0 -->
|
||||
<!-- Generated with glade 3.22.1 -->
|
||||
<interface>
|
||||
<requires lib="gtk+" version="3.6"/>
|
||||
<requires lib="gtk+" version="3.18"/>
|
||||
<object class="GtkListStore" id="liststore_accounts">
|
||||
<columns>
|
||||
<!-- column-name account_obj -->
|
||||
@@ -24,45 +24,130 @@
|
||||
<column type="gchararray"/>
|
||||
</columns>
|
||||
</object>
|
||||
<object class="GtkWindow" id="config_window">
|
||||
<object class="GtkApplicationWindow" id="config_window">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="title" translatable="yes">Mailnag Configuration</property>
|
||||
<property name="window_position">center</property>
|
||||
<property name="default_width">460</property>
|
||||
<property name="default_height">320</property>
|
||||
<signal name="delete-event" handler="config_window_deleted" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkBox" id="box1">
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar" id="headerbar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box_navigation">
|
||||
<property name="spacing">12</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<child type="title">
|
||||
<object class="GtkStackSwitcher">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">18</property>
|
||||
<property name="margin_right">18</property>
|
||||
<property name="margin_top">12</property>
|
||||
<property name="margin_bottom">12</property>
|
||||
<property name="homogeneous">True</property>
|
||||
<property name="stack">stack1</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkMenuButton" id="menubutton1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="popover">popovermenu</property>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="btn_page1">
|
||||
<property name="label" translatable="yes">General</property>
|
||||
<object class="GtkImage">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="icon_name">open-menu</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="pack_type">end</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkStack" id="stack1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="transition_type">slide-left-right</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="toggled" handler="btn_page_toggled" swapped="no"/>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_accounts">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">liststore_accounts</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="search_column">1</property>
|
||||
<signal name="row-activated" handler="treeview_accounts_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="btn_page2">
|
||||
<property name="label" translatable="yes">Accounts</property>
|
||||
<object class="GtkToolbar" id="toolbar1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="toggled" handler="btn_page_toggled" swapped="no"/>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="toolbar_style">icons</property>
|
||||
<property name="icon_size">1</property>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_add_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Add Account</property>
|
||||
<property name="icon_name">list-add-symbolic</property>
|
||||
<signal name="clicked" handler="btn_add_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_remove_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Remove Account</property>
|
||||
<property name="icon_name">list-remove-symbolic</property>
|
||||
<signal name="clicked" handler="btn_remove_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_edit_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Edit Account</property>
|
||||
<property name="icon_name">text-editor-symbolic</property>
|
||||
<signal name="clicked" handler="btn_edit_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="inline-toolbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
@@ -70,295 +155,154 @@
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToggleButton" id="btn_page3">
|
||||
<property name="label" translatable="yes">Plugins</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<signal name="toggled" handler="btn_page_toggled" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="linked"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
<property name="name">page0</property>
|
||||
<property name="title" translatable="yes">Accounts</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkNotebook" id="notebook">
|
||||
<object class="GtkBox" id="box9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="show_tabs">False</property>
|
||||
<property name="show_border">False</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkEventBox" id="eventbox1">
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="margin_left">12</property>
|
||||
<property name="margin_right">12</property>
|
||||
<property name="margin_bottom">12</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<property name="spacing">12</property>
|
||||
<child>
|
||||
<object class="GtkBox" id="box5">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image_logo">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label_app_desc">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label">APP_DESC</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes"><a href="https://github.com/pulb/mailnag">Mailnag</a> - An extensible mail notification daemon.
|
||||
Copyright (c) 2011 - 2017 Patrick Ulbrich
|
||||
and contributors.</property>
|
||||
<property name="use_markup">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSwitch" id="switch_daemon_enabled">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="halign">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
<style>
|
||||
<class name="bg-gradient"/>
|
||||
</style>
|
||||
</object>
|
||||
</child>
|
||||
<child type="tab">
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
||||
<object class="GtkTreeView" id="treeview_plugins">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_accounts">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">liststore_accounts</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="search_column">1</property>
|
||||
<signal name="row-activated" handler="treeview_accounts_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection"/>
|
||||
</child>
|
||||
</object>
|
||||
<property name="model">liststore_plugins</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="search_column">1</property>
|
||||
<signal name="cursor-changed" handler="treeview_plugins_cursor_changed" swapped="no"/>
|
||||
<signal name="row-activated" handler="treeview_plugins_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection"/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolbar" id="toolbar1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="toolbar_style">icons</property>
|
||||
<property name="icon_size">1</property>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_add_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Add Account</property>
|
||||
<property name="icon_name">list-add-symbolic</property>
|
||||
<signal name="clicked" handler="btn_add_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_remove_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Remove Account</property>
|
||||
<property name="icon_name">list-remove-symbolic</property>
|
||||
<signal name="clicked" handler="btn_remove_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_edit_account">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Edit Account</property>
|
||||
<property name="icon_name">text-editor-symbolic</property>
|
||||
<signal name="clicked" handler="btn_edit_account_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="inline-toolbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkToolbar" id="toolbar2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="toolbar_style">icons</property>
|
||||
<property name="icon_size">1</property>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_edit_plugin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Edit Plugin</property>
|
||||
<property name="icon_name">text-editor-symbolic</property>
|
||||
<signal name="clicked" handler="btn_edit_plugin_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="inline-toolbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child type="tab">
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkBox" id="box9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="shadow_type">in</property>
|
||||
<child>
|
||||
<object class="GtkTreeView" id="treeview_plugins">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="model">liststore_plugins</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="enable_search">False</property>
|
||||
<property name="search_column">1</property>
|
||||
<signal name="cursor-changed" handler="treeview_plugins_cursor_changed" swapped="no"/>
|
||||
<signal name="row-activated" handler="treeview_plugins_row_activated" swapped="no"/>
|
||||
<child internal-child="selection">
|
||||
<object class="GtkTreeSelection" id="treeview-selection3"/>
|
||||
</child>
|
||||
</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" id="toolbar2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="toolbar_style">icons</property>
|
||||
<property name="icon_size">1</property>
|
||||
<child>
|
||||
<object class="GtkToolButton" id="btn_edit_plugin">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="label" translatable="yes">Edit Plugin</property>
|
||||
<property name="icon_name">text-editor-symbolic</property>
|
||||
<signal name="clicked" handler="btn_edit_plugin_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="homogeneous">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
<style>
|
||||
<class name="inline-toolbar"/>
|
||||
</style>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child type="tab">
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="name">page1</property>
|
||||
<property name="title" translatable="yes">Plugins</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkPopoverMenu" id="popovermenu">
|
||||
<property name="can_focus">False</property>
|
||||
<property name="border_width">6</property>
|
||||
<property name="relative_to">menubutton1</property>
|
||||
<child>
|
||||
<object class="GtkBox">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="orientation">vertical</property>
|
||||
<child>
|
||||
<object class="GtkSwitch" id="switch_daemon_enabled">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Enable/disable Mailnag daemon</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="valign">center</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">6</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLinkButton">
|
||||
<property name="label" translatable="yes">Donate</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<property name="uri">https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=8F5FNJ3U4N7AW</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkModelButton" id="info">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="text" translatable="yes">Info</property>
|
||||
<property name="centered">True</property>
|
||||
<signal name="clicked" handler="btn_info_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="submenu">submenu0</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</interface>
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
#
|
||||
# mailnag-config
|
||||
#
|
||||
# Copyright 2011 - 2016 Patrick Ulbrich <zulu99@gmx.net>
|
||||
# Copyright 2011 Ralf Hersel <ralf.hersel@gmx.net>
|
||||
# Copyright 2011 - 2019 Patrick Ulbrich <zulu99@gmx.net>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -29,37 +28,66 @@ import os
|
||||
import subprocess
|
||||
import logging
|
||||
from gi.repository import Gtk
|
||||
from dbus.mainloop.glib import DBusGMainLoop
|
||||
|
||||
from Mailnag.common.utils import fix_cwd, init_logging
|
||||
|
||||
fix_cwd()
|
||||
|
||||
from Mailnag.common.utils import set_procname, shutdown_existing_instance
|
||||
from Mailnag.common.i18n import _
|
||||
from Mailnag.common.utils import set_procname, shutdown_existing_instance, get_data_file, get_data_paths
|
||||
from Mailnag.common.dist_cfg import BIN_DIR
|
||||
from Mailnag.configuration.configwindow import ConfigWindow
|
||||
|
||||
LOG_LEVEL = logging.DEBUG
|
||||
|
||||
|
||||
class App(Gtk.Application):
|
||||
def __init__(self):
|
||||
Gtk.Application.__init__(self, application_id = 'com.github.pulp.Mailnag')
|
||||
self.win = None
|
||||
|
||||
|
||||
def do_startup(self):
|
||||
Gtk.Application.do_startup(self)
|
||||
|
||||
# Add icons in alternative data paths (e.g. ./data/icons)
|
||||
# to the icon search path in case Mailnag is launched
|
||||
# from a local directory (without installing).
|
||||
icon_theme = Gtk.IconTheme.get_default()
|
||||
for path in get_data_paths():
|
||||
icon_theme.append_search_path(os.path.join(path, "icons"))
|
||||
|
||||
|
||||
def do_activate(self):
|
||||
Gtk.Application.do_activate(self)
|
||||
|
||||
if not self.win:
|
||||
self.win = ConfigWindow(self)
|
||||
self.win.get_gtk_window().present()
|
||||
|
||||
|
||||
def do_shutdown(self):
|
||||
Gtk.Application.do_shutdown(self)
|
||||
|
||||
if self.win.get_daemon_enabled():
|
||||
try:
|
||||
# the launched daemon shuts down
|
||||
# an already running daemon
|
||||
print "Launching Mailnag daemon."
|
||||
subprocess.Popen(os.path.join(BIN_DIR, "mailnag"))
|
||||
except:
|
||||
print "ERROR: Failed to launch Mailnag daemon."
|
||||
else:
|
||||
# shutdown running Mailnag daemon
|
||||
shutdown_existing_instance(wait_for_completion = False)
|
||||
|
||||
|
||||
def main():
|
||||
set_procname("mailnag-config")
|
||||
init_logging(enable_stdout = True, enable_syslog = False, log_level = LOG_LEVEL)
|
||||
confwin = ConfigWindow()
|
||||
Gtk.main()
|
||||
|
||||
if confwin.daemon_enabled:
|
||||
try:
|
||||
# the launched daemon shuts down
|
||||
# an already running daemon
|
||||
print "Launching Mailnag daemon."
|
||||
subprocess.Popen(os.path.join(BIN_DIR, "mailnag"))
|
||||
except:
|
||||
print "ERROR: Failed to launch Mailnag daemon."
|
||||
else:
|
||||
DBusGMainLoop(set_as_default = True)
|
||||
# shutdown running Mailnag daemon
|
||||
shutdown_existing_instance()
|
||||
app = App()
|
||||
app.run(None)
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__": main()
|
||||
|
||||
Reference in New Issue
Block a user