diff --git a/gajim/dialogs.py b/gajim/dialogs.py index 83bea5f58..c73a472a3 100644 --- a/gajim/dialogs.py +++ b/gajim/dialogs.py @@ -56,6 +56,7 @@ from gajim.common.exceptions import GajimGeneralException from gajim.gtk.dialogs import * from gajim.gtk.add_contact import AddNewContactWindow from gajim.gtk.util import get_icon_name +from gajim.gtk.util import resize_window log = logging.getLogger('gajim.dialogs') @@ -1559,7 +1560,7 @@ class DataFormWindow(Dialog): Gtk.ResponseType.CANCEL), (Gtk.STOCK_OK, Gtk.ResponseType.OK)], on_response_ok=self.on_ok) self.set_resizable(True) - gtkgui_helpers.resize_window(self, 600, 400) + resize_window(self, 600, 400) self.dataform_widget = dataforms_widget.DataFormWidget() self.dataform = dataforms.extend_form(node=form) self.dataform_widget.set_sensitive(True) diff --git a/gajim/gtk/history.py b/gajim/gtk/history.py index 42a253210..3645be39a 100644 --- a/gajim/gtk/history.py +++ b/gajim/gtk/history.py @@ -23,7 +23,8 @@ import time import datetime -from enum import IntEnum, unique +from enum import IntEnum +from enum import unique from gi.repository import Gtk from gi.repository import Gdk @@ -33,12 +34,19 @@ from gajim.common import app from gajim.common import helpers from gajim.common import exceptions from gajim.common.i18n import _ -from gajim.common.const import ShowConstant, KindConstant +from gajim.common.const import ShowConstant +from gajim.common.const import KindConstant from gajim import conversation_textview -from gajim.gtk import util -from gajim.gtk.util import python_month, gtk_month +from gajim.gtk.util import python_month +from gajim.gtk.util import gtk_month +from gajim.gtk.util import resize_window +from gajim.gtk.util import move_window +from gajim.gtk.util import get_icon_name +from gajim.gtk.util import get_completion_liststore +from gajim.gtk.util import get_builder + from gajim.gtk.dialogs import ErrorDialog @unique @@ -66,7 +74,7 @@ class HistoryWindow: """ def __init__(self, jid=None, account=None): - xml = util.get_builder('history_window.ui') + xml = get_builder('history_window.ui') self.window = xml.get_object('history_window') self.window.set_application(app.app) self.calendar = xml.get_object('calendar') @@ -137,12 +145,12 @@ class HistoryWindow: else: self._load_history(None) - util.resize_window(self.window, - app.config.get('history_window_width'), - app.config.get('history_window_height')) - util.move_window(self.window, - app.config.get('history_window_x-position'), - app.config.get('history_window_y-position')) + resize_window(self.window, + app.config.get('history_window_width'), + app.config.get('history_window_height')) + move_window(self.window, + app.config.get('history_window_x-position'), + app.config.get('history_window_y-position')) xml.connect_signals(self) self.window.show_all() @@ -163,7 +171,7 @@ class HistoryWindow: {key : (jid, account, nick_name, full_completion_name} This is a generator and does pseudo-threading via idle_add(). """ - liststore = util.get_completion_liststore( + liststore = get_completion_liststore( self.jid_entry.get_child()) liststore.set_sort_column_id(1, Gtk.SortType.ASCENDING) self.jid_entry.get_child().get_completion().connect( @@ -183,8 +191,8 @@ class HistoryWindow: completion_dict.update( helpers.get_contact_dict_for_account(account)) - muc_active_icon = util.get_icon_name('muc-active') - online_icon = util.get_icon_name('online') + muc_active_icon = get_icon_name('muc-active') + online_icon = get_icon_name('online') keys = list(completion_dict.keys()) # Move the actual jid at first so we load history faster diff --git a/gajim/gtk/statusicon.py b/gajim/gtk/statusicon.py index 8b496ba44..e1b907842 100644 --- a/gajim/gtk/statusicon.py +++ b/gajim/gtk/statusicon.py @@ -24,12 +24,14 @@ import os from gi.repository import Gtk from gajim import dialogs -from gajim import gtkgui_helpers + from gajim.common import app from gajim.common import helpers from gajim.common.i18n import _ + from gajim.gtk.util import get_builder from gajim.gtk.util import get_icon_name +from gajim.gtk.util import move_window from gajim.gtk.single_message import SingleMessageWindow from gajim.gtk.tooltips import NotificationAreaTooltip @@ -382,9 +384,9 @@ class StatusIcon: if not win.get_property('visible'): win.show_all() if app.config.get('save-roster-position'): - gtkgui_helpers.move_window(win, - app.config.get('roster_x-position'), - app.config.get('roster_y-position')) + move_window(win, + app.config.get('roster_x-position'), + app.config.get('roster_y-position')) if not app.config.get('roster_window_skip_taskbar'): win.set_property('skip-taskbar-hint', False) win.present_with_time(Gtk.get_current_event_time()) @@ -398,9 +400,9 @@ class StatusIcon: win = app.interface.roster.window if not win.get_property('visible') and app.config.get( 'save-roster-position'): - gtkgui_helpers.move_window(win, - app.config.get('roster_x-position'), - app.config.get('roster_y-position')) + move_window(win, + app.config.get('roster_x-position'), + app.config.get('roster_y-position')) app.interface.handle_event(account, jid, event.type_) def on_middle_click(self): diff --git a/gajim/gtk/util.py b/gajim/gtk/util.py index 78c6f516f..6dfc7126f 100644 --- a/gajim/gtk/util.py +++ b/gajim/gtk/util.py @@ -262,3 +262,12 @@ def convert_rgb_to_hex(rgb_string: str) -> str: green = int(rgb.green * 255) blue = int(rgb.blue * 255) return '#%02x%02x%02x' % (red, green, blue) + + +def get_monitor_scale_factor() -> int: + display = Gdk.Display.get_default() + monitor = display.get_primary_monitor() + if monitor is None: + log.warning('Could not determine scale factor') + return 1 + return monitor.get_scale_factor() diff --git a/gajim/gtkgui_helpers.py b/gajim/gtkgui_helpers.py index 5ba27d1ca..e3816d00e 100644 --- a/gajim/gtkgui_helpers.py +++ b/gajim/gtkgui_helpers.py @@ -97,13 +97,6 @@ if os.name == 'nt': from gajim.common import helpers -def get_total_screen_geometry(): - screen = Gdk.Screen.get_default() - window = Gdk.Screen.get_root_window(screen) - w, h = window.get_width(), window.get_height() - log.debug('Get screen geometry: %s %s', w, h) - return w, h - def add_image_to_button(button, icon_name): img = Gtk.Image() path_img = get_icon_path(icon_name) @@ -153,55 +146,6 @@ def get_gtk_builder(file_name, widget=None): builder.add_from_file(file_path) return builder -def get_completion_liststore(entry): - """ - Create a completion model for entry widget completion list consists of - (Pixbuf, Text) rows - """ - completion = Gtk.EntryCompletion() - liststore = Gtk.ListStore(str, str) - - render_pixbuf = Gtk.CellRendererPixbuf() - completion.pack_start(render_pixbuf, False) - completion.add_attribute(render_pixbuf, 'icon_name', 0) - - render_text = Gtk.CellRendererText() - completion.pack_start(render_text, True) - completion.add_attribute(render_text, 'text', 1) - completion.set_property('text_column', 1) - completion.set_model(liststore) - entry.set_completion(completion) - return liststore - -def move_window(window, x, y): - """ - Move the window, but also check if out of screen - """ - screen_w, screen_h = get_total_screen_geometry() - if x < 0: - x = 0 - if y < 0: - y = 0 - w, h = window.get_size() - if x + w > screen_w: - x = screen_w - w - if y + h > screen_h: - y = screen_h - h - window.move(x, y) - -def resize_window(window, w, h): - """ - Resize window, but also checks if huge window or negative values - """ - screen_w, screen_h = get_total_screen_geometry() - if not w or not h: - return - if w > screen_w: - w = screen_w - if h > screen_h: - h = screen_h - window.resize(abs(w), abs(h)) - def at_the_end(widget): """Determines if a Scrollbar in a GtkScrolledWindow is at the end. @@ -373,18 +317,6 @@ def get_fade_color(treeview, selected, focused): return Gdk.RGBA(bg.red*p + fg.red*q, bg.green*p + fg.green*q, bg.blue*p + fg.blue*q) -def make_gtk_month_python_month(month): - """ - GTK starts counting months from 0, so January is 0 but Python's time start - from 1, so align to Python - - NOTE: Month MUST be an integer. - """ - return month + 1 - -def make_python_month_gtk_month(month): - return month - 1 - def make_pixbuf_grayscale(pixbuf): pixbuf2 = pixbuf.copy() pixbuf.saturate_and_pixelate(pixbuf2, 0.0, False) @@ -805,11 +737,3 @@ def pango_to_css_weight(number): if number > 900: return 900 return int(math.ceil(number / 100.0)) * 100 - -def get_monitor_scale_factor(): - display = Gdk.Display.get_default() - monitor = display.get_primary_monitor() - if monitor is None: - log.warning('Could not determine scale factor') - return 1 - return monitor.get_scale_factor() diff --git a/gajim/message_window.py b/gajim/message_window.py index 4d1fcc3aa..043d419f3 100644 --- a/gajim/message_window.py +++ b/gajim/message_window.py @@ -42,6 +42,8 @@ from gajim.chat_control import ChatControl from gajim.gtk.dialogs import YesNoDialog from gajim.gtk.util import get_icon_name +from gajim.gtk.util import resize_window +from gajim.gtk.util import move_window #################### @@ -185,7 +187,7 @@ class MessageWindow: return sum(len(d) for d in self._controls.values()) def resize(self, width, height): - gtkgui_helpers.resize_window(self.window, width, height) + resize_window(self.window, width, height) def _on_window_focus(self, widget, event): # on destroy() the window that was last focused gets the focus @@ -1047,7 +1049,7 @@ class MessageWindowMgr(GObject.GObject): else: return - gtkgui_helpers.move_window(win.window, pos[0], pos[1]) + move_window(win.window, pos[0], pos[1]) def _mode_to_key(self, contact, acct, type_, resource=None): if self.mode == self.ONE_MSG_WINDOW_NEVER: @@ -1284,9 +1286,9 @@ class MessageWindowMgr(GObject.GObject): child = w.parent_paned.get_child2() w.parent_paned.remove(child) self.parent_win.lookup_action('show-roster').set_enabled(False) - gtkgui_helpers.resize_window(w.window, - app.config.get('roster_width'), - app.config.get('roster_height')) + resize_window(w.window, + app.config.get('roster_width'), + app.config.get('roster_height')) self._windows = {} diff --git a/gajim/notify.py b/gajim/notify.py index 7038a4065..4baa899d5 100644 --- a/gajim/notify.py +++ b/gajim/notify.py @@ -39,6 +39,8 @@ from gajim.common import ged from gajim.common.i18n import _ from gajim.gtk.util import get_icon_name +from gajim.gtk.util import get_monitor_scale_factor +from gajim.gtk.util import get_total_screen_geometry log = logging.getLogger('gajim.notify') @@ -172,7 +174,7 @@ class Notification: app.interface.roster.popup_notification_windows.append(instance) return - scale = gtkgui_helpers.get_monitor_scale_factor() + scale = get_monitor_scale_factor() icon_pixbuf = gtkgui_helpers.gtk_icon_theme.load_icon_for_scale( icon_name, 48, scale, 0) @@ -300,7 +302,7 @@ class PopupNotificationWindow: window_width, self.window_height = self.window.get_size() app.interface.roster.popups_notification_height += self.window_height pos_x = app.config.get('notification_position_x') - screen_w, screen_h = gtkgui_helpers.get_total_screen_geometry() + screen_w, screen_h = get_total_screen_geometry() if pos_x < 0: pos_x = screen_w - window_width + pos_x + 1 pos_y = app.config.get('notification_position_y') @@ -337,7 +339,7 @@ class PopupNotificationWindow: current_index += 1 window_width, window_height = window_instance.window.get_size() app.interface.roster.popups_notification_height += window_height - screen_w, screen_h = gtkgui_helpers.get_total_screen_geometry() + screen_w, screen_h = get_total_screen_geometry() window_instance.window.move(screen_w - window_width, screen_h - \ app.interface.roster.popups_notification_height) diff --git a/gajim/roster_window.py b/gajim/roster_window.py index 4ecea15d6..3700c9d61 100644 --- a/gajim/roster_window.py +++ b/gajim/roster_window.py @@ -83,6 +83,8 @@ from gajim.gtk.history import HistoryWindow from gajim.gtk.accounts import AccountsWindow from gajim.gtk.tooltips import RosterTooltip from gajim.gtk.util import get_icon_name +from gajim.gtk.util import resize_window +from gajim.gtk.util import move_window log = logging.getLogger('gajim.roster') @@ -2373,9 +2375,9 @@ class RosterWindow: def on_message_window_delete(self, win_mgr, msg_win): if app.config.get('one_message_window') == 'always_with_roster': self.show_roster_vbox(True) - gtkgui_helpers.resize_window(self.window, - app.config.get('roster_width'), - app.config.get('roster_height')) + resize_window(self.window, + app.config.get('roster_width'), + app.config.get('roster_height')) def close_all_from_dict(self, dic): """ @@ -5704,13 +5706,13 @@ class RosterWindow: if len(app.connections) < 2: # Do not merge accounts if only one exists self.regroup = False - gtkgui_helpers.resize_window(self.window, - app.config.get('roster_width'), - app.config.get('roster_height')) + resize_window(self.window, + app.config.get('roster_width'), + app.config.get('roster_height')) if app.config.get('save-roster-position'): - gtkgui_helpers.move_window(self.window, - app.config.get('roster_x-position'), - app.config.get('roster_y-position')) + move_window(self.window, + app.config.get('roster_x-position'), + app.config.get('roster_y-position')) self.popups_notification_height = 0 self.popup_notification_windows = []