[Git][gajim/gajim][master] Make Profile a GtkApplicationWindow

Philipp Hörist gitlab at dev.gajim.org
Sun Jul 1 13:31:21 CEST 2018


Philipp Hörist pushed to branch master at gajim / gajim


Commits:
0dde1759 by Philipp Hörist at 2018-07-01T13:30:13+02:00
Make Profile a GtkApplicationWindow

Fixes #9180

- - - - -


3 changed files:

- gajim/data/gui/profile_window.ui
- gajim/gui_interface.py
- gajim/profile_window.py


Changes:

=====================================
gajim/data/gui/profile_window.ui
=====================================
The diff for this file was not included because it is too large.

=====================================
gajim/gui_interface.py
=====================================
--- a/gajim/gui_interface.py
+++ b/gajim/gui_interface.py
@@ -268,9 +268,11 @@ class Interface:
             self.show_vcard_when_connect.remove(account)
 
     def edit_own_details(self, account):
-        if 'profile' not in self.instances[account]:
-            self.instances[account]['profile'] = \
-            profile_window.ProfileWindow(account, app.interface.roster.window)
+        window = app.get_app_window(profile_window.ProfileWindow)
+        if window is None:
+            profile_window.ProfileWindow(account)
+        else:
+            window.present()
 
     @staticmethod
     def handle_gc_error(gc_control, pritext, sectext):


=====================================
gajim/profile_window.py
=====================================
--- a/gajim/profile_window.py
+++ b/gajim/profile_window.py
@@ -20,43 +20,46 @@
 ## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
 ##
 
-# THIS FILE IS FOR **OUR** PROFILE (when we edit our INFO)
-
-from gi.repository import Gtk
-from gi.repository import Gdk
-from gi.repository import GLib
-from gi.repository import GdkPixbuf
 import base64
 import time
 import logging
 import hashlib
 
+from gi.repository import Gtk
+from gi.repository import Gdk
+from gi.repository import GLib
+
 from gajim import gtkgui_helpers
 from gajim import dialogs
 from gajim.filechoosers import AvatarChooserDialog
 from gajim.common.const import AvatarSize
-
 from gajim.common import app
 from gajim.common import ged
 
 log = logging.getLogger('gajim.profile')
 
-class ProfileWindow:
-    """
-    Class for our information window
-    """
 
-    def __init__(self, account, transient_for=None):
+class ProfileWindow(Gtk.ApplicationWindow):
+    def __init__(self, account):
+        Gtk.ApplicationWindow.__init__(self)
+        self.set_application(app.app)
+        self.set_position(Gtk.WindowPosition.CENTER)
+        self.set_show_menubar(False)
+        self.set_title(_('Profile'))
+
+        self.connect('destroy', self.on_profile_window_destroy)
+        self.connect('key-press-event', self.on_profile_window_key_press_event)
+
         self.xml = gtkgui_helpers.get_gtk_builder('profile_window.ui')
-        self.window = self.xml.get_object('profile_window')
-        self.window.set_transient_for(transient_for)
+        self.add(self.xml.get_object('profile_box'))
         self.progressbar = self.xml.get_object('progressbar')
         self.statusbar = self.xml.get_object('statusbar')
         self.context_id = self.statusbar.get_context_id('profile')
 
         self.account = account
         self.jid = app.get_jid_from_account(account)
-        account_label = app.config.get_per('accounts', account, 'account_label')
+        account_label = app.config.get_per(
+            'accounts', account, 'account_label')
         self.set_value('account_label', account_label)
 
         self.dialog = None
@@ -64,17 +67,18 @@ class ProfileWindow:
         self.avatar_encoded = None
         self.avatar_sha = None
         self.message_id = self.statusbar.push(self.context_id,
-            _('Retrieving profile…'))
-        self.update_progressbar_timeout_id = GLib.timeout_add(100,
-            self.update_progressbar)
+                                              _('Retrieving profile…'))
+        self.update_progressbar_timeout_id = GLib.timeout_add(
+            100, self.update_progressbar)
         self.remove_statusbar_timeout_id = None
 
         self.xml.connect_signals(self)
         app.ged.register_event_handler('vcard-published', ged.GUI1,
-            self._nec_vcard_published)
+                                       self._nec_vcard_published)
         app.ged.register_event_handler('vcard-not-published', ged.GUI1,
-            self._nec_vcard_not_published)
-        self.window.show_all()
+                                       self._nec_vcard_not_published)
+
+        self.show_all()
         self.xml.get_object('ok_button').grab_focus()
         app.connections[account].get_module('VCardTemp').request_vcard(
             self._nec_vcard_received, self.jid)
@@ -99,13 +103,13 @@ class ProfileWindow:
             self._nec_vcard_published)
         app.ged.remove_event_handler('vcard-not-published', ged.GUI1,
             self._nec_vcard_not_published)
-        del app.interface.instances[self.account]['profile']
+
         if self.dialog: # Image chooser dialog
             self.dialog.destroy()
 
     def on_profile_window_key_press_event(self, widget, event):
         if event.keyval == Gdk.KEY_Escape:
-            self.window.destroy()
+            self.destroy()
 
     def _clear_photo(self, widget):
         # empty the image
@@ -124,10 +128,10 @@ class ProfileWindow:
             sha = app.interface.save_avatar(path_to_file, publish=True)
             if sha is None:
                 dialogs.ErrorDialog(
-                    _('Could not load image'), transient_for=self.window)
+                    _('Could not load image'), transient_for=self)
                 return
 
-            scale = self.window.get_scale_factor()
+            scale = self.get_scale_factor()
             surface = app.interface.get_avatar(sha, AvatarSize.VCARD, scale)
 
             button = self.xml.get_object('PHOTO_button')
@@ -142,7 +146,7 @@ class ProfileWindow:
             self.avatar_encoded = base64.b64encode(publish).decode('utf-8')
             self.avatar_mime_type = 'image/png'
 
-        AvatarChooserDialog(on_ok, transient_for=self.window)
+        AvatarChooserDialog(on_ok, transient_for=self)
 
     def on_PHOTO_button_press_event(self, widget, event):
         """
@@ -178,7 +182,7 @@ class ProfileWindow:
             if not widget.is_focus():
                 pritext = _('Wrong date format')
                 dialogs.ErrorDialog(pritext, _('Format of the date must be '
-                    'YYYY-MM-DD'), transient_for=self.window)
+                    'YYYY-MM-DD'), transient_for=self)
                 GLib.idle_add(lambda: widget.grab_focus())
             return True
 
@@ -212,7 +216,7 @@ class ProfileWindow:
                 if 'TYPE' in vcard_[i]:
                     self.avatar_mime_type = vcard_[i]['TYPE']
 
-                scale = self.window.get_scale_factor()
+                scale = self.get_scale_factor()
                 surface = app.interface.get_avatar(
                     self.avatar_sha, AvatarSize.VCARD, scale)
                 if surface is None:
@@ -319,7 +323,7 @@ class ProfileWindow:
         if app.connections[self.account].connected < 2:
             dialogs.ErrorDialog(_('You are not connected to the server'),
                     _('Without a connection, you can not publish your contact '
-                    'information.'), transient_for=self.window)
+                    'information.'), transient_for=self)
             return
         vcard_, sha = self.make_vcard()
         nick = ''
@@ -344,7 +348,7 @@ class ProfileWindow:
         if self.update_progressbar_timeout_id is not None:
             GLib.source_remove(self.update_progressbar_timeout_id)
             self.update_progressbar_timeout_id = None
-        self.window.destroy()
+        self.destroy()
 
     def _nec_vcard_not_published(self, obj):
         if obj.conn.name != self.account:
@@ -361,7 +365,7 @@ class ProfileWindow:
             self.update_progressbar_timeout_id = None
         dialogs.InformationDialog(_('vCard publication failed'),
             _('There was an error while publishing your personal information, '
-            'try again later.'), transient_for=self.window)
+            'try again later.'), transient_for=self)
 
     def on_cancel_button_clicked(self, widget):
-        self.window.destroy()
+        self.destroy()



View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/0dde1759e89d39ccf57bc3795800da652305d2ae

-- 
View it on GitLab: https://dev.gajim.org/gajim/gajim/commit/0dde1759e89d39ccf57bc3795800da652305d2ae
You're receiving this email because of your account on dev.gajim.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gajim.org/pipermail/commits/attachments/20180701/dec0f34e/attachment-0001.html>


More information about the Commits mailing list