[Commits] [SCM] claws branch, gtk3, updated. 3.99.0-62-g39e6a93d9
mones at claws-mail.org
mones at claws-mail.org
Fri Mar 19 19:25:51 CET 2021
The branch, gtk3 has been updated
via 39e6a93d9760ee655f8f99252522859b50ae307a (commit)
from 7b3d97649043f857a1c53baec3dcb23eccbd91c6 (commit)
Summary of changes:
src/plugins/python/examples/auto/compose_any | 16 ++--
src/plugins/python/examples/auto/shutdown | 6 --
src/plugins/python/examples/auto/startup | 40 +++++----
.../python/examples/compose/Macro-Expansion | 2 +-
.../python/examples/main/Create-Tomboy-Note | 99 ++++++++++++----------
src/plugins/python/examples/main/Mass-mail | 12 +--
src/plugins/python/examples/main/Open-Tomboy-Notes | 2 -
.../examples/main/Print-action-names-to-stdout | 23 ++++-
.../examples/main/Recusively-mark-messages-as-read | 12 +--
9 files changed, 119 insertions(+), 93 deletions(-)
- Log -----------------------------------------------------------------
commit 39e6a93d9760ee655f8f99252522859b50ae307a
Author: Ricardo Mones <ricardo at mones.org>
Date: Fri Mar 19 19:25:43 2021 +0100
Update python examples to Python3 with Gtk3
diff --git a/src/plugins/python/examples/auto/compose_any b/src/plugins/python/examples/auto/compose_any
index b15f0f338..948dfa9e9 100644
--- a/src/plugins/python/examples/auto/compose_any
+++ b/src/plugins/python/examples/auto/compose_any
@@ -16,7 +16,7 @@ import re
# prefixes are defined below.
# So, for example, replying to a mail with
# Subject: R: Re: R: Re: Aw: R: Re: Old topic
-# will result in
+# will result in
# Subject: Re: Old topic
#
# This is a slightly adapted version of a script provided
@@ -25,19 +25,19 @@ def strip_subject_prefixes():
# A list of prefixes to strip during reply. Add the ones that are
# interesting for you here.
prefixes = ["Re", "R", "Odp", "Aw"]
-
+
# Build up regex to match unwanted prefixes
prefix_string = "|".join(prefixes)
regex_str = r"^(Re|Fwd|Fw):( (%s):)+" % prefix_string
-
+
# Get a string with those prefixes stripped
- new_subject = re.sub(regex_str, r"\1:", clawsmail.compose_window.get_subject())
-
+ new_subject = re.sub(regex_str, r"\1:", clawsmail.compose_window.get_subject())
+
# Set this string to be the new subject
clawsmail.compose_window.set_subject(new_subject)
-
+
# Normally, when the subject or body is modified, the mail gets marked
- # as modified, wich results in a popup dialog when the compose window is
+ # as modified, wich results in a popup dialog when the compose window is
# just closed. We don't want to treat the automatic modification of the
# subject line from above to trigger such a popup, so we override the
# modification marker.
@@ -47,4 +47,4 @@ def strip_subject_prefixes():
clawsmail.compose_window.set_modified(False)
-strip_subject_prefixes()
\ No newline at end of file
+strip_subject_prefixes()
diff --git a/src/plugins/python/examples/auto/shutdown b/src/plugins/python/examples/auto/shutdown
index 90ec5c5fe..5d3aa51ee 100644
--- a/src/plugins/python/examples/auto/shutdown
+++ b/src/plugins/python/examples/auto/shutdown
@@ -1,12 +1,7 @@
# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require('2.0')
-import gtk
-
# stuff that only needs to be cleaned up if claws mail is not exiting anyways
if not clawsmail.is_exiting():
-
# cleanup menus and actions that have been added in the startup script
try:
ui_manager = clawsmail.get_mainwindow_ui_manager()
@@ -20,4 +15,3 @@ if not clawsmail.is_exiting():
group.remove_action(action)
except NameError:
pass
-
diff --git a/src/plugins/python/examples/auto/startup b/src/plugins/python/examples/auto/startup
index 8901cf047..90d38dcb3 100644
--- a/src/plugins/python/examples/auto/startup
+++ b/src/plugins/python/examples/auto/startup
@@ -1,14 +1,13 @@
# -*- coding: utf-8 -*-
-import pygtk
-pygtk.require('2.0')
-import gtk
+import gi
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
# lists to store information for cleanup in the shutdown script
mainwindow_merge_ids = []
mainwindow_actions = []
-
# function definitions
def add_python_documentation_menu_item():
@@ -24,15 +23,17 @@ def add_python_documentation_menu_item():
global mainwindow_merge_ids
global mainwindow_actions
-
+
# create "Python API documentation" menu item
group = clawsmail.get_mainwindow_action_group()
ui_manager = clawsmail.get_mainwindow_ui_manager()
- action = gtk.Action("pydoc", "Python API documentation", None, None)
+ action = Gtk.Action(name="pydoc", label="Python API documentation")
action.connect("activate", pydoc_cb)
group.add_action(action)
merge_id = ui_manager.new_merge_id()
- ui_manager.add_ui(merge_id, "/Menu/Help", "pydoc", "pydoc", gtk.UI_MANAGER_MENUITEM, True)
+ ui_manager.add_ui(
+ merge_id, "/Menu/Help", "pydoc", "pydoc",
+ Gtk.UIManagerItemType.MENUITEM, True)
mainwindow_merge_ids.append(merge_id)
mainwindow_actions.append(action)
@@ -44,19 +45,21 @@ def add_mark_thread_read_menu_item():
group = clawsmail.get_mainwindow_action_group()
group.get_action("Edit/SelectThread").activate()
group.get_action("Message/Mark/MarkRead").activate()
- clawsmail.summaryview_select_messages(selected_messages)
+ clawsmail.summaryview_select_messages(selected_messages)
global mainwindow_merge_ids
global mainwindow_actions
-
+
# create "Mark thread read" menu item
group = clawsmail.get_mainwindow_action_group()
ui_manager = clawsmail.get_mainwindow_ui_manager()
- action = gtk.Action("ThreadRead", "Mark thread as read", None, None)
+ action = Gtk.Action(name="ThreadRead", label="Mark thread as read")
action.connect("activate", thread_read_cb)
group.add_action_with_accel(action, None)
merge_id = ui_manager.new_merge_id()
- ui_manager.add_ui(merge_id, "/Menu/Edit", "ThreadRead", "ThreadRead", gtk.UI_MANAGER_MENUITEM, False)
+ ui_manager.add_ui(
+ merge_id, "/Menu/Edit", "ThreadRead", "ThreadRead",
+ Gtk.UIManagerItemType.MENUITEM, False)
mainwindow_merge_ids.append(merge_id)
mainwindow_actions.append(action)
@@ -64,15 +67,18 @@ def add_dbus_interface():
# exports an interface to Claws Mail on the session D-Bus
#
# Example invokation to trigger an update of the summary view from the command line:
- # dbus-send --session --type=method_call --dest=org.ClawsMail.PythonPlugin /org/ClawsMail/PythonPlugin org.ClawsMail.PythonPlugin.MainWindow.TriggerGtkAction string:'View/UpdateSummary'
+ # dbus-send --session --type=method_call --dest=org.ClawsMail.PythonPlugin \
+ # /org/ClawsMail/PythonPlugin \
+ # org.ClawsMail.PythonPlugin.MainWindow.TriggerGtkAction \
+ # string:'View/UpdateSummary'
try:
import dbus
import dbus.service
- from dbus.mainloop.glib import DBusGMainLoop
+ from dbus.mainloop.glib import DBusGMainLoop
except ImportError:
- print 'Cannot setup D-Bus interface: D-Bus Python bindings not available.'
+ print("Can't setup D-Bus interface: D-Bus Python bindings not available.")
return None
-
+
class ClawsMailService(dbus.service.Object):
@dbus.service.method("org.ClawsMail.PythonPlugin.MainWindow", in_signature='s', out_signature='')
def TriggerGtkAction(self, action_path):
@@ -80,8 +86,8 @@ def add_dbus_interface():
if action:
action.activate()
else:
- print 'No such action:', action_path
-
+ print('No such action: {}'.format(action_path))
+
loop = DBusGMainLoop(set_as_default=True)
session_bus = dbus.SessionBus()
name = dbus.service.BusName("org.ClawsMail.PythonPlugin", session_bus)
diff --git a/src/plugins/python/examples/compose/Macro-Expansion b/src/plugins/python/examples/compose/Macro-Expansion
index 80e988782..939b8ee2f 100644
--- a/src/plugins/python/examples/compose/Macro-Expansion
+++ b/src/plugins/python/examples/compose/Macro-Expansion
@@ -19,7 +19,7 @@ def get_current_word(buffer):
if not end.ends_word():
end.forward_word_end()
return (start.get_text(end), start, end)
-
+
buffer = clawsmail.compose_window.text.get_buffer() # get text buffer of body editor
(current_word, start, end) = get_current_word(buffer) # get current word under the cursor
diff --git a/src/plugins/python/examples/main/Create-Tomboy-Note b/src/plugins/python/examples/main/Create-Tomboy-Note
index 6002a4f8d..ab32385a0 100644
--- a/src/plugins/python/examples/main/Create-Tomboy-Note
+++ b/src/plugins/python/examples/main/Create-Tomboy-Note
@@ -1,10 +1,13 @@
# -*- Mode: python -*-
import dbus
-import gtk
+import gi
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
def add_note(msg):
-
+
def get_reminder(desc):
get_reminder.reminder = None
@@ -20,70 +23,78 @@ def add_note(msg):
if cb.get_active():
get_reminder.reminder += "".join([" at ", "%02d" % hours.get_value_as_int(), ":", "%02d" % minutes.get_value_as_int()])
ww.destroy()
-
+
def day_selected(cal, exp):
ymd = list(cal.get_date())
ymd[1] += 1
exp.set_label("/".join(str(vv) for vv in ymd))
-
+
def custom(button, ww, entry):
get_reminder.reminder = entry.get_text()
ww.destroy()
-
+
# Check if the user wants a reminder in a dialog box
- win = gtk.Window()
+ win = Gtk.Window()
win.set_title("Reminder")
- win.connect("destroy", gtk.main_quit)
- win.set_position(gtk.WIN_POS_CENTER)
- table = gtk.Table(2,7)
+ win.connect("destroy", Gtk.main_quit)
+ win.set_position(Gtk.WindowPosition.CENTER)
+ table = Gtk.Table(n_rows=2, n_columns=7)
win.add(table)
- table.attach(gtk.Label(desc), 0, 2, 0, 1)
+ table.attach(Gtk.Label(label=desc), 0, 2, 0, 1)
# no reminder
- button = gtk.Button("No reminder")
+ button = Gtk.Button(label="No reminder")
button.connect("clicked", no_reminder, win)
- table.attach(button, 0, 1, 1, 2, xoptions=gtk.FILL, yoptions=0, ypadding=4)
- table.attach(gtk.HSeparator(), 0, 2, 2, 3)
+ table.attach(button, 0, 1, 1, 2,
+ xoptions=Gtk.AttachOptions.FILL, yoptions=0, ypadding=4)
+ table.attach(Gtk.HSeparator(), 0, 2, 2, 3)
# date / time reminder
- button = gtk.Button("Date/Time")
- table.attach(button, 0, 1, 3, 4, xoptions=gtk.FILL, yoptions=gtk.EXPAND | gtk.FILL, ypadding=4)
- hbox = gtk.HBox()
+ button = Gtk.Button(label="Date/Time")
+ table.attach(button, 0, 1, 3, 4,
+ xoptions=Gtk.AttachOptions.FILL,
+ yoptions=Gtk.AttachOptions.EXPAND | Gtk.AttachOptions.FILL, ypadding=4)
+ hbox = Gtk.HBox()
table.attach(hbox, 1, 2, 3, 4)
- cal = gtk.Calendar()
- exp = gtk.Expander()
+ cal = Gtk.Calendar()
+ exp = Gtk.Expander()
day_selected(cal, exp)
cal.connect("day-selected", day_selected, exp)
exp.add(cal)
- hbox.pack_start(exp)
- cb = gtk.CheckButton("at")
- hbox.pack_start(cb, False, False)
- hours = gtk.SpinButton(gtk.Adjustment(12.0, 0.0, 24.0, 1.0, 5.0, 0.0))
+ hbox.pack_start(exp, False, False, 5)
+ cb = Gtk.CheckButton(label="at")
+ hbox.pack_start(cb, False, False, 5)
+ hours = Gtk.SpinButton.new(Gtk.Adjustment(
+ value=12.0, lower=0.0, upper=24.0, step_increment=1.0,
+ page_increment=5.0, page_size=0.0), 1.0, 0)
hours.set_numeric(True)
hours.set_wrap(True)
- hbox.pack_start(hours, False, False)
- hbox.pack_start(gtk.Label(":"), False, False)
- minutes = gtk.SpinButton(gtk.Adjustment(0.0, 0.0, 59.0, 1.0, 5.0, 0.0))
+ hbox.pack_start(hours, False, False, 5)
+ hbox.pack_start(Gtk.Label(label=":"), False, False, 5)
+ minutes = Gtk.SpinButton.new(Gtk.Adjustment(
+ value=0.0, lower=0.0, upper=59.0, step_increment=1.0,
+ page_increment=5.0, page_size=0.0), 1.0, 0)
minutes.set_numeric(True)
minutes.set_wrap(True)
- hbox.pack_start(minutes, False, False)
+ hbox.pack_start(minutes, False, False, 5)
button.connect("clicked", date_time_cb, win, cal, cb, hours, minutes)
# custom
- button = gtk.Button("custom")
- table.attach(button, 0, 1, 4, 5, xoptions=gtk.FILL, yoptions=0, ypadding=4)
- entry = gtk.Entry()
+ button = Gtk.Button(label="custom")
+ table.attach(button, 0, 1, 4, 5,
+ xoptions=Gtk.AttachOptions.FILL, yoptions=0, ypadding=4)
+ entry = Gtk.Entry()
button.connect("clicked", custom, win, entry)
table.attach(entry, 1, 2, 4, 5)
-
+
# "Show note" toggle option
- table.attach(gtk.HSeparator(), 0, 2, 5, 6)
- cb = gtk.CheckButton("Show note")
+ table.attach(Gtk.HSeparator(), 0, 2, 5, 6)
+ cb = Gtk.CheckButton(label="Show note")
table.attach(cb, 0, 2, 6, 7)
win.show_all()
win.present()
- gtk.main()
+ Gtk.main()
return (get_reminder.reminder, cb.get_active())
-
+
title = msg.Subject
# set up contents: opening tag
content = ["<note-content>"]
@@ -98,13 +109,14 @@ def add_note(msg):
content.extend(["!", reminder, "\n"])
# link back to email
msgid = msg.MessageID
- if msgid[0] != "<":
- msgid = "<" + msgid
- if msgid[-1] != ">":
- msgid += ">"
- msgid = msgid.replace("<", "<").replace(">", ">")
- link = '<link:cm-mail uri="%s/%s">%s</link:cm-mail>' % (clawsmail.get_folderview_selected_folder().get_identifier(), msgid, msg.Subject)
- content.append(link)
+ if msgid:
+ if msgid[0] != "<":
+ msgid = "<" + msgid
+ if msgid[-1] != ">":
+ msgid += ">"
+ msgid = msgid.replace("<", "<").replace(">", ">")
+ link = '<link:cm-mail uri="%s/%s">%s</link:cm-mail>' % (clawsmail.get_folderview_selected_folder().get_identifier(), msgid, msg.Subject)
+ content.append(link)
#closing tag
content.append("</note-content>")
@@ -122,9 +134,4 @@ def add_note(msg):
# iterate over all notes
for msg in clawsmail.get_summaryview_selected_message_list():
add_note(msg)
-
-
-
-
-
diff --git a/src/plugins/python/examples/main/Mass-mail b/src/plugins/python/examples/main/Mass-mail
index 228e7dafa..bed8d0110 100644
--- a/src/plugins/python/examples/main/Mass-mail
+++ b/src/plugins/python/examples/main/Mass-mail
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
# Send the same mail to a list of people, one at a time.
-# As this is normal Python code, the message contents and
-# the addresses could also come from an external source
+# As this is normal Python code, the message contents and
+# the addresses could also come from an external source
# (such as a file, or a database).
addresses = ["mail1 at example.tld", "mail2 at example.tld", "mail3 at example.tld"]
@@ -13,17 +13,17 @@ for address in addresses:
# in which case the same rules as on a menu click one "New message"
# are applied.
cw = clawsmail.ComposeWindow("berndth at gmx.de")
-
+
# Add a recipient. There are also add_Cc and add_Bcc functions.
cw.add_To(address)
-
+
# Set the subject of the message
cw.set_subject("Mass mail")
-
+
# For the message body, access to the GtkTextView is granted in ComposeWindow.text.
buffer = cw.text.get_buffer()
buffer.set_text("This is an automatic message")
-
+
# Access to the GtkUIManager is also provided, look for "send later" action
action = None
for action_group in cw.ui_manager.get_action_groups():
diff --git a/src/plugins/python/examples/main/Open-Tomboy-Notes b/src/plugins/python/examples/main/Open-Tomboy-Notes
index 20da034f3..785de08cf 100644
--- a/src/plugins/python/examples/main/Open-Tomboy-Notes
+++ b/src/plugins/python/examples/main/Open-Tomboy-Notes
@@ -1,9 +1,7 @@
# -*- Mode: python -*-
import re
-
import dbus
-import gtk
# collect message ids of all selected messages
msgids = set()
diff --git a/src/plugins/python/examples/main/Print-action-names-to-stdout b/src/plugins/python/examples/main/Print-action-names-to-stdout
index 3420eb6a7..01cc942ca 100644
--- a/src/plugins/python/examples/main/Print-action-names-to-stdout
+++ b/src/plugins/python/examples/main/Print-action-names-to-stdout
@@ -1,5 +1,26 @@
# -*- coding: utf-8 -*-
+import gi
+gi.require_version("Gtk", "3.0")
+from gi.repository import Gtk
+
action_group = clawsmail.get_mainwindow_action_group()
+actions = []
for action in action_group.list_actions():
- print action.get_name()
+ actions.append(action.get_name())
+actions.sort()
+
+win = Gtk.Window(title="List of actions")
+win.connect("destroy", Gtk.main_quit)
+win.set_position(Gtk.WindowPosition.CENTER)
+swin = Gtk.ScrolledWindow(None, None)
+swin.set_min_content_height(400)
+swin.set_min_content_width(600)
+buf = Gtk.TextBuffer()
+buf.set_text('\n'.join(actions))
+view = Gtk.TextView.new_with_buffer(buf)
+swin.add(view)
+win.add(swin)
+win.show_all()
+win.present()
+Gtk.main()
diff --git a/src/plugins/python/examples/main/Recusively-mark-messages-as-read b/src/plugins/python/examples/main/Recusively-mark-messages-as-read
index bcb3cb54b..13b5c2b86 100644
--- a/src/plugins/python/examples/main/Recusively-mark-messages-as-read
+++ b/src/plugins/python/examples/main/Recusively-mark-messages-as-read
@@ -7,13 +7,13 @@ def deal_with_folder(folder):
action_group = clawsmail.get_mainwindow_action_group();
select_all_action = action_group.get_action("Edit/SelectAll")
mark_read_action = action_group.get_action("Message/Mark/MarkRead")
-
+
# Select given folder
clawsmail.folderview_select_folder(folder)
-
+
# Search for messages with age greater than 28 days
clawsmail.quicksearch_search("ag 28", clawsmail.QUICK_SEARCH_EXTENDED)
-
+
# Mark all messages in the search result as read
select_all_action.activate()
mark_read_action.activate()
@@ -28,12 +28,12 @@ if root is not None:
# Get a tree of subfolders. The argument could also be a string of a mailbox name,
# or left out for a list of mailbox trees.
tree = clawsmail.get_folder_tree(root)
-
+
# Call above function for all folders.
tree.traverse(deal_with_folder)
-
+
# Clear the quicksearch widget again
clawsmail.quicksearch_clear()
-
+
# Change back to original folder
clawsmail.folderview_select(root)
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list