Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <[email protected]>
Date: Fri, 30 Aug 2024 16:44:15 +0000
Subject: [PATCH] joinDialog: Fix detecting pointer devices

Gtk.get_current_event_device() is not available in GTK4.

Closes: https://gitlab.gnome.org/GNOME/polari/-/issues/209
---
src/serverRoomManager.js | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/serverRoomManager.js b/src/serverRoomManager.js
index 88753648388d..3122a09500d9 100644
--- a/src/serverRoomManager.js
+++ b/src/serverRoomManager.js
@@ -3,7 +3,6 @@
//
// SPDX-License-Identifier: GPL-2.0-or-later

-import Gdk from 'gi://Gdk';
import Gio from 'gi://Gio';
import GLib from 'gi://GLib';
import GObject from 'gi://GObject';
@@ -179,15 +178,23 @@ class ServerRoomList extends Gtk.Box {
this._toggleChecked(this._list.model.get_path(iter));
});

+ let pointerDeviceEvent = false;
+ const clickController = new Gtk.GestureClick();
+ clickController.connect('pressed', (_controller, _nPress, _x, _y) => {
+ pointerDeviceEvent = true;
+ });
+ this._list.add_controller(clickController);
+
this._list.connect('row-activated', (view, path, _column) => {
this._toggleChecked(path);
+ pointerDeviceEvent = false;
});

this._toggleRenderer.connect('toggled', (cell, pathStr) => {
// For pointer devices, ::row-activated is emitted as well
- const dev = Gtk.get_current_event_device();
- if (dev && dev.input_source === Gdk.InputSource.KEYBOARD)
+ if (!pointerDeviceEvent)
this._toggleChecked(Gtk.TreePath.new_from_string(pathStr));
+ pointerDeviceEvent = false;
});

this._manager = ServerRoomManager.getDefault();
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <[email protected]>
Date: Wed, 13 Nov 2024 13:39:36 +0100
Subject: [PATCH] mainWindow: Disconnect event handler on destroy

Without this, it remains active when the main window is closed and
reopened, causing a crash.

Closes: https://gitlab.gnome.org/GNOME/polari/-/issues/233
---
src/mainWindow.js | 23 +++++++++++++----------
1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/mainWindow.js b/src/mainWindow.js
index dfb2ea07dd16..7d813a881106 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -96,49 +96,50 @@ class MainWindow extends Adw.ApplicationWindow {
}
});

- const app = this.application;
- if (app.isTestInstance)
+ this._app = this.application;
+ if (this._app.isTestInstance)
this.add_css_class('test-instance');
if (GLib.get_application_name().toLowerCase().includes('snapshot'))
this.add_css_class('snapshot');

const actions = [{
name: 'search',
handler: () => this._searchButton.activate(),
}];
actions.forEach(a => {
- app.lookup_action(a.name).connect('activate', a.handler);
+ this._app.lookup_action(a.name).connect('activate', a.handler);
});

this._roomStack.connect('notify::view-height',
() => this.notify('view-height'));

this._accountsMonitor = AccountsMonitor.getDefault();
this._accountsChangedId = this._accountsMonitor.connect(
'accounts-changed', this._onAccountsChanged.bind(this));
this._onAccountsChanged(this._accountsMonitor);

this._accountReachableId = this._accountsMonitor.connect(
'account-reachable-changed', this._onAccountsReachableChanged.bind(this));
this._onAccountsReachableChanged();

this._roomManager = RoomManager.getDefault();
this._roomsLoadedId = this._roomManager.connect('rooms-loaded',
this._onRoomsLoaded.bind(this));
this._roomRemovedId = this._roomManager.connect('room-removed',
this._onRoomRemoved.bind(this));
this._onRoomsLoaded();

this._updateUserListLabel();

- this._userListAction = app.lookup_action('user-list');
+ this._userListAction = this._app.lookup_action('user-list');

- app.connect('action-state-changed::user-list', (group, name, value) => {
- if (value.get_boolean())
- this._userListPopover.popup();
- else
- this._userListPopover.popdown();
- });
+ this._userListActionStateChangedId =
+ this._app.connect('action-state-changed::user-list', (group, name, value) => {
+ if (value.get_boolean())
+ this._userListPopover.popup();
+ else
+ this._userListPopover.popdown();
+ });
this._userListPopover.connect('notify::visible', () => {
if (!this._userListPopover.visible)
this._userListAction.change_state(GLib.Variant.new('b', false));
@@ -207,6 +208,8 @@ class MainWindow extends Adw.ApplicationWindow {

this._roomManager.disconnect(this._roomsLoadedId);
this._roomManager.disconnect(this._roomRemovedId);
+
+ this._app.disconnect(this._userListActionStateChangedId);
}

_onAccountsChanged() {
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= <[email protected]>
Date: Wed, 13 Nov 2024 14:13:28 +0100
Subject: [PATCH] Add option to disable URL preview feature

It has security and privacy concerns.

Closes: https://gitlab.gnome.org/GNOME/polari/-/issues/133
---
data/org.gnome.Polari.gschema.xml | 5 +++++
data/ui/main-window.ui | 4 ++++
src/application.js | 2 ++
src/chatView.js | 3 ++-
4 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/data/org.gnome.Polari.gschema.xml b/data/org.gnome.Polari.gschema.xml
index bfc3de08ab26..a97603976f40 100644
--- a/data/org.gnome.Polari.gschema.xml
+++ b/data/org.gnome.Polari.gschema.xml
@@ -36,6 +36,11 @@ SPDX-FileCopyrightText: 2015 Florian Müllner <[email protected]>
<summary>Last active channel</summary>
<description>Last active (selected) channel</description>
</key>
+ <key type="b" name="url-preview">
+ <default>false</default>
+ <summary>URL Preview</summary>
+ <description>Show preview for URLs.</description>
+ </key>
</schema>

<schema id="org.gnome.Polari.Account">
diff --git a/data/ui/main-window.ui b/data/ui/main-window.ui
index 0756a5e24f7d..021a71e3c0ef 100644
--- a/data/ui/main-window.ui
+++ b/data/ui/main-window.ui
@@ -21,6 +21,10 @@ SPDX-License-Identifier: GPL-2.0-or-later
<attribute name="action">app.run-in-background</attribute>
<attribute name="label" translatable="yes">Run in Background</attribute>
</item>
+ <item>
+ <attribute name="action">app.url-preview</attribute>
+ <attribute name="label" translatable="yes">URL Preview</attribute>
+ </item>
</section>
<section>
<item>
diff --git a/src/application.js b/src/application.js
index 6a297646e39f..9a06fbd1081b 100644
--- a/src/application.js
+++ b/src/application.js
@@ -361,6 +361,8 @@ class Application extends Adw.Application {
this._settings = new Gio.Settings({schema_id: 'org.gnome.Polari'});
let action = this._settings.create_action('run-in-background');
this.add_action(action);
+ action = this._settings.create_action('url-preview');
+ this.add_action(action);

action = this.lookup_action('user-list');
action.connect('notify::enabled', () => {
diff --git a/src/chatView.js b/src/chatView.js
index fcb373687327..de13a80e2e44 100644
--- a/src/chatView.js
+++ b/src/chatView.js
@@ -1305,7 +1305,8 @@ class ChatView extends Gtk.ScrolledWindow {
this._insertWithTags(iter,
url.name, tags.concat(this._lookupTag('url'), tag));

- if (GLib.uri_parse_scheme(url.url).startsWith('http'))
+ if (this._app._settings.get_boolean('url-preview') &&
+ GLib.uri_parse_scheme(url.url).startsWith('http'))
previews.push(new URLPreview({uri: url.url}));

pos = url.pos + url.name.length;
14 changes: 14 additions & 0 deletions pkgs/by-name/po/polari/check_dbus_unconditionally.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/src/application.js b/src/application.js
index 6a29764..a14cd1a 100644
--- a/src/application.js
+++ b/src/application.js
@@ -222,9 +222,6 @@ class Application extends Adw.Application {
}

vfunc_dbus_register(conn, _path) {
- if (!Utils.isFlatpakSandbox())
- return true;
-
GLib.setenv('IDLE_PERSIST', '1', false);
this._ensureService(conn,
Tp.ACCOUNT_MANAGER_BUS_NAME,
63 changes: 63 additions & 0 deletions pkgs/by-name/po/polari/fix_sparql_database_race.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
diff --git a/src/utils.js b/src/utils.js
index 3a9863d..6314f39 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -547,29 +547,40 @@ export function formatDateTime(date) {
}

/**
- * @returns {Tracker.SparqlConnection}
+ * @returns {Promise<Tracker.SparqlConnection>}
*/
export async function getSparqlStore() {
- await _sparqlStorePromise;
+ if (_sparqlStorePromise)
+ return _sparqlStorePromise;

- if (_sparqlStore)
- return _sparqlStore;
-
- const {promise, resolve} = Promise.withResolvers();
+ const { promise, resolve, reject } = Promise.withResolvers();
_sparqlStorePromise = promise;

- const path = GLib.build_filenamev(
- [GLib.get_user_data_dir(), 'polari', 'chatlogs.v1']);
- const dir = Gio.File.new_for_path(path);
- const ontology = Gio.File.new_for_uri(
- 'resource:///org/gnome/Polari/ontologies/');
-
- _sparqlStore = await Tracker.SparqlConnection.new_async(
- Tracker.SparqlConnectionFlags.FTS_ENABLE_STEMMER |
- Tracker.SparqlConnectionFlags.FTS_ENABLE_UNACCENT,
- dir, ontology, null);
+ (async () => {
+ try {
+ if (_sparqlStore) {
+ resolve(_sparqlStore);
+ return;
+ }

- resolve();
+ const path = GLib.build_filenamev(
+ [GLib.get_user_data_dir(), 'polari', 'chatlogs.v1']);
+ const dir = Gio.File.new_for_path(path);
+ const ontology = Gio.File.new_for_uri(
+ 'resource:///org/gnome/Polari/ontologies/');
+
+ const store = await Tracker.SparqlConnection.new_async(
+ Tracker.SparqlConnectionFlags.FTS_ENABLE_STEMMER |
+ Tracker.SparqlConnectionFlags.FTS_ENABLE_UNACCENT,
+ dir, ontology, null
+ );
+
+ _sparqlStore = store;
+ resolve(store);
+ } catch (e) {
+ reject(e);
+ }
+ })();

- return _sparqlStore;
+ return promise;
}
Loading
Loading