Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
ximper-shell-notification-center
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ximper Linux
ximper-shell-notification-center
Commits
dd0798ae
Verified
Commit
dd0798ae
authored
Mar 26, 2026
by
Kirill Unitsaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
quick-settings: add WiFi and VPN tiles with NetworkManager integration
parent
56d36009
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
254 additions
and
2 deletions
+254
-2
quick-settings.scss
data/style/widgets/quick-settings.scss
+10
-1
POTFILES
po/POTFILES
+2
-0
ru.po
po/ru.po
+40
-0
config.json.in
src/config.json.in
+2
-0
configSchema.json
src/configSchema.json
+1
-1
networkManagerProxy.vala
...trolCenter/widgets/quickSettings/networkManagerProxy.vala
+190
-0
quickSettings.vala
src/controlCenter/widgets/quickSettings/quickSettings.vala
+6
-0
vpnTile.vala
src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
+0
-0
wifiTile.vala
src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
+0
-0
meson.build
src/meson.build
+3
-0
No files found.
data/style/widgets/quick-settings.scss
View file @
dd0798ae
...
...
@@ -62,8 +62,17 @@
.quick-settings-submenu
{
border-radius
:
var
(
--
border-radius
);
margin
:
5px
0
;
padding
:
4px
;
padding
:
4px
0
;
background
:
var
(
--
dialog-bg-color
);
border
:
1px
solid
var
(
--
border-color
);
box-shadow
:
0px
0px
10px
var
(
--
headerbar-shade-color
);
button
{
margin
:
2px
4px
;
}
separator
{
margin-top
:
4px
;
margin-bottom
:
4px
;
}
}
po/POTFILES
View file @
dd0798ae
...
...
@@ -11,4 +11,6 @@ src/controlCenter/widgets/quickSettings/tiles/powerProfilesTile.vala
src/controlCenter/widgets/quickSettings/tiles/commandTile.vala
src/controlCenter/widgets/quickSettings/tiles/caffeineTile.vala
src/controlCenter/widgets/quickSettings/tiles/nightLightTile.vala
src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
data/ui/notifications_widget.blp
po/ru.po
View file @
dd0798ae
...
...
@@ -118,3 +118,43 @@ msgstr "Баланс"
#: src/controlCenter/widgets/quickSettings/tiles/powerProfilesTile.vala:99
msgid "Power Saver"
msgstr "Энергосбережение"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Wi-Fi"
msgstr "Wi-Fi"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Disabled"
msgstr "Отключён"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Not Connected"
msgstr "Не подключён"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Connecting…"
msgstr "Подключение…"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Password"
msgstr "Пароль"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Connect"
msgstr "Подключить"
#: src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
msgid "Network Settings"
msgstr "Настройки сети"
#: src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
msgid "VPN"
msgstr "VPN"
#: src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
msgid "Disconnected"
msgstr "Отключён"
#: src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
msgid "VPN Settings"
msgstr "Настройки VPN"
src/config.json.in
View file @
dd0798ae
...
...
@@ -37,6 +37,8 @@
"widget-config": {
"quick-settings": {
"tiles": [
{ "type": "wifi" },
{ "type": "vpn" },
{ "type": "power-profiles" },
{ "type": "dnd" },
{ "type": "dark-mode" },
...
...
src/configSchema.json
View file @
dd0798ae
...
...
@@ -459,7 +459,7 @@
"type"
:
{
"type"
:
"string"
,
"description"
:
"The tile type"
,
"enum"
:
[
"dnd"
,
"dark-mode"
,
"power-profiles"
,
"caffeine"
,
"night-light"
,
"command"
]
"enum"
:
[
"dnd"
,
"dark-mode"
,
"power-profiles"
,
"caffeine"
,
"night-light"
,
"command"
,
"wifi"
,
"vpn"
]
},
"label"
:
{
"type"
:
"string"
,
...
...
src/controlCenter/widgets/quickSettings/networkManagerProxy.vala
0 → 100644
View file @
dd0798ae
namespace
XimperShellNotificationCenter.Widgets
{
[
DBus
(
name
=
"org.freedesktop.NetworkManager"
)]
public
interface
NMDBus
:
Object
{
public
abstract
bool
wireless_enabled
{
get
;
set
;
}
public
abstract
ObjectPath
[]
devices
{
owned
get
;
}
public
abstract
ObjectPath
[]
active_connections
{
owned
get
;
}
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.Device"
)]
public
interface
NMDeviceDBus
:
Object
{
public
abstract
uint
device_type
{
get
;
}
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.Device.Wireless"
)]
public
interface
NMWirelessDBus
:
Object
{
public
abstract
ObjectPath
active_access_point
{
owned
get
;
}
public
abstract
ObjectPath
[]
get_all_access_points
()
throws
GLib
.
Error
;
public
abstract
void
request_scan
(
HashTable
<
string
,
Variant
>
options
)
throws
GLib
.
Error
;
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.AccessPoint"
)]
public
interface
NMAccessPointDBus
:
Object
{
public
abstract
uint8
[]
ssid
{
owned
get
;
}
public
abstract
uint8
strength
{
get
;
}
public
abstract
uint
wpa_flags
{
get
;
}
public
abstract
uint
rsn_flags
{
get
;
}
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.Connection.Active"
)]
public
interface
NMActiveConnDBus
:
Object
{
public
abstract
bool
vpn
{
get
;
}
public
abstract
uint
state
{
get
;
}
public
abstract
ObjectPath
connection
{
owned
get
;
}
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.Settings"
)]
public
interface
NMSettingsDBus
:
Object
{
public
abstract
ObjectPath
[]
list_connections
()
throws
GLib
.
Error
;
}
[
DBus
(
name
=
"org.freedesktop.NetworkManager.Settings.Connection"
)]
public
interface
NMSettingsConnDBus
:
Object
{
public
abstract
HashTable
<
string
,
HashTable
<
string
,
Variant
>>
get_settings
()
throws
GLib
.
Error
;
}
public
class
NetworkManagerProxy
:
Object
{
public
signal
void
state_changed
();
private
NMDBus
?
nm
=
null
;
private
DBusProxy
?
nm_raw
=
null
;
private
bool
_available
=
false
;
private
bool
_has_wifi
=
false
;
private
static
NetworkManagerProxy
?
_instance
=
null
;
public
static
NetworkManagerProxy
get_instance
()
{
if
(
_instance
==
null
)
{
_instance
=
new
NetworkManagerProxy
();
}
return
_instance
;
}
public
bool
available
{
get
{
return
_available
;
}
}
public
bool
has_wifi
{
get
{
return
_has_wifi
;
}
}
private
NetworkManagerProxy
()
{
connect_dbus
.
begin
();
}
private
async
void
connect_dbus
()
{
try
{
nm
=
yield
Bus
.
get_proxy
(
BusType
.
SYSTEM
,
"org.freedesktop.NetworkManager"
,
"/org/freedesktop/NetworkManager"
);
nm_raw
=
nm
as
DBusProxy
;
_available
=
true
;
nm_raw
.
g_properties_changed
.
connect
(
on_props_changed
);
yield
detect_wifi
();
}
catch
(
Error
e
)
{
warning
(
"NetworkManager not available: %s"
,
e
.
message
);
}
}
private
void
on_props_changed
(
Variant
changed
,
string
[]
invalidated
)
{
state_changed
();
}
private
async
void
detect_wifi
()
{
if
(
nm
==
null
)
return
;
try
{
foreach
(
var
dev_path
in
nm
.
devices
)
{
var
dev
=
yield
Bus
.
get_proxy
<
NMDeviceDBus
>
(
BusType
.
SYSTEM
,
"org.freedesktop.NetworkManager"
,
dev_path
);
if
(
dev
.
device_type
==
2
)
{
_has_wifi
=
true
;
return
;
}
}
}
catch
(
Error
e
)
{
warning
(
"Failed to detect WiFi: %s"
,
e
.
message
);
}
}
public
bool
get_wireless_enabled
()
{
if
(
nm
==
null
)
return
false
;
return
nm
.
wireless_enabled
;
}
public
void
set_wireless_enabled
(
bool
val
)
{
if
(
nm
==
null
)
return
;
nm
.
wireless_enabled
=
val
;
}
public
async
ObjectPath
?
get_wifi_device
()
{
if
(
nm
==
null
)
return
null
;
try
{
foreach
(
var
dev_path
in
nm
.
devices
)
{
var
dev
=
yield
Bus
.
get_proxy
<
NMDeviceDBus
>
(
BusType
.
SYSTEM
,
"org.freedesktop.NetworkManager"
,
dev_path
);
if
(
dev
.
device_type
==
2
)
{
return
dev_path
;
}
}
}
catch
(
Error
e
)
{
warning
(
"get_wifi_device: %s"
,
e
.
message
);
}
return
null
;
}
public
unowned
NMDBus
?
get_nm
()
{
return
nm
;
}
public
async
Variant
?
call_nm
(
string
method
,
Variant
?
args
)
throws
GLib
.
Error
{
var
proxy
=
yield
new
DBusProxy
.
for_bus
(
BusType
.
SYSTEM
,
DBusProxyFlags
.
NONE
,
null
,
"org.freedesktop.NetworkManager"
,
"/org/freedesktop/NetworkManager"
,
"org.freedesktop.NetworkManager"
,
null
);
return
yield
proxy
.
call
(
method
,
args
,
DBusCallFlags
.
NONE
,
30000
,
null
);
}
public
static
string
ssid_to_string
(
uint8
[]
ssid
)
{
return
(
string
)
ssid
;
}
public
static
string
get_signal_icon
(
uint8
strength
)
{
if
(
strength
>=
80
)
{
return
"network-wireless-signal-excellent-symbolic"
;
}
else
if
(
strength
>=
60
)
{
return
"network-wireless-signal-good-symbolic"
;
}
else
if
(
strength
>=
40
)
{
return
"network-wireless-signal-ok-symbolic"
;
}
else
if
(
strength
>=
20
)
{
return
"network-wireless-signal-weak-symbolic"
;
}
return
"network-wireless-signal-none-symbolic"
;
}
}
}
src/controlCenter/widgets/quickSettings/quickSettings.vala
View file @
dd0798ae
...
...
@@ -28,6 +28,12 @@ namespace XimperShellNotificationCenter.Widgets {
case
"night-light"
:
tile
=
new
NightLightTile
(
cfg
);
break
;
case
"wifi"
:
tile
=
new
WifiTile
(
cfg
);
break
;
case
"vpn"
:
tile
=
new
VpnTile
(
cfg
);
break
;
default
:
warning
(
"Unknown quick-settings tile: %s"
,
type_id
);
...
...
src/controlCenter/widgets/quickSettings/tiles/vpnTile.vala
0 → 100644
View file @
dd0798ae
This diff is collapsed.
Click to expand it.
src/controlCenter/widgets/quickSettings/tiles/wifiTile.vala
0 → 100644
View file @
dd0798ae
This diff is collapsed.
Click to expand it.
src/meson.build
View file @
dd0798ae
...
...
@@ -52,6 +52,9 @@ widget_sources = [
'controlCenter/widgets/quickSettings/tiles/commandTile.vala',
'controlCenter/widgets/quickSettings/tiles/caffeineTile.vala',
'controlCenter/widgets/quickSettings/tiles/nightLightTile.vala',
'controlCenter/widgets/quickSettings/networkManagerProxy.vala',
'controlCenter/widgets/quickSettings/tiles/wifiTile.vala',
'controlCenter/widgets/quickSettings/tiles/vpnTile.vala',
]
app_sources = [
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment