mirror of
https://github.com/artizirk/wdisplays.git
synced 2025-09-06 23:30:58 +03:00
Compare commits
21 Commits
1.1
...
157b8c51e8
Author | SHA1 | Date | |
---|---|---|---|
157b8c51e8 | |||
79225e57a3 | |||
4257ef446b | |||
cef925b96a | |||
|
6b7c637875 | ||
|
50e549465d | ||
6233901a88 | |||
2c5e4d72b5 | |||
|
4cc1d2300d | ||
|
7afc947f62 | ||
|
1a32d8bbe2 | ||
|
64aa4a551d | ||
|
052c492040 | ||
|
0683283fa5 | ||
|
919726a2e5 | ||
|
aefde05389 | ||
|
c15e5870d9 | ||
|
73f3cc2dd2 | ||
|
9f8508b31e | ||
|
f4cf935e49 | ||
|
59edbbd155 |
4
.clang-format
Normal file
4
.clang-format
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
IndentWidth: '2'
|
||||||
|
|
||||||
|
...
|
14
.editorconfig
Normal file
14
.editorconfig
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# EditorConfig configuration
|
||||||
|
# http://editorconfig.org
|
||||||
|
|
||||||
|
# Top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# UTF-8 charset, set indent to spaces with width of four,
|
||||||
|
# with no trailing whitespaces and a newline ending every file.
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
indent_size = 2
|
||||||
|
indent_style = space
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
/build/
|
/build/
|
||||||
|
*.user
|
||||||
|
72
CHANGELOG.md
Normal file
72
CHANGELOG.md
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
The format is based on [Keep a Changelog][1].
|
||||||
|
|
||||||
|
This project tries to adhere to [Semantic Versioning][2].
|
||||||
|
|
||||||
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.1.3] - 2025-07-25
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
Fixed tiny GTK dropdown menu on Hyprland (Aleksanaa)
|
||||||
|
|
||||||
|
## [1.1.2] - 2025-07-25
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
Fixed compilation error with new GCC (ceamac)
|
||||||
|
|
||||||
|
## [1.1.1] - 2023-07-01
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
Added QtCreator files to .gitignore (redtide)
|
||||||
|
.editorconfig and .clang-format (redtide)
|
||||||
|
this file (redtide)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
Install icon to the app_id location (somini)
|
||||||
|
Move the output name overlay to the bottom left (WhyNotHugo)
|
||||||
|
Bump to current development version, use semver (redtide)
|
||||||
|
Updated desktop file (redtide)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
Fixed license SPDX ID in main meson.build
|
||||||
|
|
||||||
|
## [1.1] - 2023-04-18
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
Added categories to the program shortcut (IntinteDAO)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
Add package links (Jason Francis)
|
||||||
|
Backport GTK4 changes (Jason Francis)
|
||||||
|
Create WdHeadForm class (Jason Francis)
|
||||||
|
Update README (Jason Francis)
|
||||||
|
Use correct versions when binding globals (Simon Ser)
|
||||||
|
|
||||||
|
## [v1.0] - 2020-05-09
|
||||||
|
|
||||||
|
First release after <https://github.com/MichaelAquilina/wdisplays> fork
|
||||||
|
(backup of the original, deleted repository at <https://github.com/cyclopsian/wdisplays>)
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
Update application ID and readme (Jason Francis)
|
||||||
|
|
||||||
|
|
||||||
|
[1]: https://keepachangelog.com/en/1.0.0/
|
||||||
|
[2]: https://semver.org/spec/v2.0.0.html
|
||||||
|
|
||||||
|
[Unreleased]: https://github.com/artizirk/wdisplays/compare/1.1.3...HEAD
|
||||||
|
[1.1.3]: https://github.com/artizirk/wdisplays/compare/1.1.2...1.1.3
|
||||||
|
[1.1.2]: https://github.com/artizirk/wdisplays/compare/1.1.1...1.1.2
|
||||||
|
[1.1.1]: https://github.com/artizirk/wdisplays/compare/1.1...1.1.1
|
||||||
|
[1.1]: https://github.com/artizirk/wdisplays/compare/1.0...1.1
|
||||||
|
[1.0]: https://github.com/artizirk/wdisplays/releases/tag/1.0
|
@@ -20,7 +20,7 @@ Check your distro for a `wdisplays` package. Known distro packages:
|
|||||||
- [Alpine](https://pkgs.alpinelinux.org/package/edge/testing/x86_64/wdisplays)
|
- [Alpine](https://pkgs.alpinelinux.org/package/edge/testing/x86_64/wdisplays)
|
||||||
- [Arch](https://aur.archlinux.org/packages/wdisplays-git/)
|
- [Arch](https://aur.archlinux.org/packages/wdisplays-git/)
|
||||||
- [Debian](https://packages.debian.org/sid/wdisplays)
|
- [Debian](https://packages.debian.org/sid/wdisplays)
|
||||||
- [Fedora](https://copr.fedorainfracloud.org/coprs/wef/wdisplays/)
|
- [Fedora](https://packages.fedoraproject.org/pkgs/wdisplays/wdisplays)
|
||||||
- [FreeBSD](https://svnweb.freebsd.org/ports/head/x11/wdisplays/)
|
- [FreeBSD](https://svnweb.freebsd.org/ports/head/x11/wdisplays/)
|
||||||
- [Nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/tools/graphics/wdisplays)
|
- [Nix](https://github.com/NixOS/nixpkgs/tree/master/pkgs/tools/graphics/wdisplays)
|
||||||
- [OpenSUSE](https://build.opensuse.org/package/show/home%3AMWh3/wdisplays)
|
- [OpenSUSE](https://build.opensuse.org/package/show/home%3AMWh3/wdisplays)
|
||||||
@@ -70,7 +70,8 @@ It's intended to be the Wayland equivalent of an xrandr GUI, like [ARandR].
|
|||||||
Sway, like i3, doesn't save any settings unless you put them in the config
|
Sway, like i3, doesn't save any settings unless you put them in the config
|
||||||
file. See man `sway-output`. If you want to have multiple configurations
|
file. See man `sway-output`. If you want to have multiple configurations
|
||||||
depending on the monitors connected, you'll need to use an external program
|
depending on the monitors connected, you'll need to use an external program
|
||||||
like [kanshi]. Integration with that and other external daemons is planned.
|
like [kanshi] or [way-displays]. Integration with that and other external
|
||||||
|
daemons is planned.
|
||||||
|
|
||||||
### How do I add support to my compositor?
|
### How do I add support to my compositor?
|
||||||
|
|
||||||
@@ -79,6 +80,7 @@ get support for this in wlroots compositors. See the diff here for a sample
|
|||||||
implementation on top of tinywl: [tinywl-output-management].
|
implementation on top of tinywl: [tinywl-output-management].
|
||||||
|
|
||||||
[kanshi]: https://github.com/emersion/kanshi
|
[kanshi]: https://github.com/emersion/kanshi
|
||||||
|
[way-displays]: https://github.com/alex-courtis/way-displays
|
||||||
[Sway]: https://swaywm.org
|
[Sway]: https://swaywm.org
|
||||||
[Wayfire]: https://wayfire.org
|
[Wayfire]: https://wayfire.org
|
||||||
[ARandR]: https://christian.amsuess.com/tools/arandr/
|
[ARandR]: https://christian.amsuess.com/tools/arandr/
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
# SPDX-FileCopyrightText: 2020 Jason Francis <jason@cycles.network>
|
# SPDX-FileCopyrightText: 2020 Jason Francis <jason@cycles.network>
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
project('network.cycles.wdisplays', 'c', license: 'MIT', version: '1.0')
|
project('network.cycles.wdisplays', 'c',
|
||||||
|
license: 'GPL-3.0-or-later',
|
||||||
|
version: '1.1.3'
|
||||||
|
)
|
||||||
|
|
||||||
conf = configuration_data({
|
conf = configuration_data({
|
||||||
'app_id': meson.project_name(),
|
'app_id': meson.project_name(),
|
||||||
|
@@ -36,9 +36,12 @@ if scour.found()
|
|||||||
'@INPUT@', '@OUTPUT@'],
|
'@INPUT@', '@OUTPUT@'],
|
||||||
install: true,
|
install: true,
|
||||||
install_dir: icondir)
|
install_dir: icondir)
|
||||||
else
|
else
|
||||||
install_data(icon, install_dir: icondir)
|
install_data(icon,
|
||||||
endif
|
rename: '@0@.svg'.format(meson.project_name()),
|
||||||
|
install_dir: icondir
|
||||||
|
)
|
||||||
|
endif
|
||||||
|
|
||||||
install_data(
|
install_data(
|
||||||
configure_file(input: 'wdisplays.desktop.in',
|
configure_file(input: 'wdisplays.desktop.in',
|
||||||
|
@@ -1,8 +1,12 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Version=@version@
|
|
||||||
Type=Application
|
Type=Application
|
||||||
Name=wdisplays
|
|
||||||
Comment=Wlroots display configuration
|
|
||||||
Categories=GTK;Settings;DesktopSettings;
|
Categories=GTK;Settings;DesktopSettings;
|
||||||
Exec=wdisplays
|
Exec=wdisplays
|
||||||
Icon=@app_id@
|
Icon=@app_id@
|
||||||
|
|
||||||
|
Name=Displays
|
||||||
|
GenericName=Displays configuration
|
||||||
|
Comment=wlroots displays configuration
|
||||||
|
Name[it]=Schermi
|
||||||
|
GenericName[it]=Impostazioni degli schermi
|
||||||
|
Comment[it]=Impostazioni degli schermi per wlroots
|
||||||
|
@@ -195,6 +195,7 @@ static void wd_head_form_init(WdHeadForm *form) {
|
|||||||
g_menu_append(rotate_menu, "Rotate 180°", "head.rotate(180)");
|
g_menu_append(rotate_menu, "Rotate 180°", "head.rotate(180)");
|
||||||
g_menu_append(rotate_menu, "Rotate 270°", "head.rotate(270)");
|
g_menu_append(rotate_menu, "Rotate 270°", "head.rotate(270)");
|
||||||
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->rotate_button), G_MENU_MODEL(rotate_menu));
|
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->rotate_button), G_MENU_MODEL(rotate_menu));
|
||||||
|
gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(priv->rotate_button), false);
|
||||||
|
|
||||||
static const GVariantType * const mode_types[] = {
|
static const GVariantType * const mode_types[] = {
|
||||||
G_VARIANT_TYPE_INT32,
|
G_VARIANT_TYPE_INT32,
|
||||||
@@ -255,6 +256,7 @@ void wd_head_form_update(WdHeadForm *form, const struct wd_head *head,
|
|||||||
g_menu_append_item(mode_menu, item);
|
g_menu_append_item(mode_menu, item);
|
||||||
}
|
}
|
||||||
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->mode_button), G_MENU_MODEL(mode_menu));
|
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(priv->mode_button), G_MENU_MODEL(mode_menu));
|
||||||
|
gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(priv->mode_button), false);
|
||||||
// Mode entries
|
// Mode entries
|
||||||
int w = head->custom_mode.width;
|
int w = head->custom_mode.width;
|
||||||
int h = head->custom_mode.height;
|
int h = head->custom_mode.height;
|
||||||
|
@@ -1039,6 +1039,7 @@ static void activate(GtkApplication* app, gpointer user_data) {
|
|||||||
g_menu_append(main_menu, "_Show Screen Contents", "app.capture-screens");
|
g_menu_append(main_menu, "_Show Screen Contents", "app.capture-screens");
|
||||||
g_menu_append(main_menu, "_Overlay Screen Names", "app.show-overlay");
|
g_menu_append(main_menu, "_Overlay Screen Names", "app.show-overlay");
|
||||||
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(state->menu_button), G_MENU_MODEL(main_menu));
|
gtk_menu_button_set_menu_model(GTK_MENU_BUTTON(state->menu_button), G_MENU_MODEL(main_menu));
|
||||||
|
gtk_menu_button_set_use_popover(GTK_MENU_BUTTON(state->menu_button), false);
|
||||||
|
|
||||||
g_signal_connect(state->info_bar, "response", G_CALLBACK(info_response), state);
|
g_signal_connect(state->info_bar, "response", G_CALLBACK(info_response), state);
|
||||||
/* first child of GtkInfoBar is always GtkRevealer */
|
/* first child of GtkInfoBar is always GtkRevealer */
|
||||||
|
@@ -526,7 +526,7 @@ static void output_manager_handle_done(void *data,
|
|||||||
static const struct zwlr_output_manager_v1_listener output_manager_listener = {
|
static const struct zwlr_output_manager_v1_listener output_manager_listener = {
|
||||||
.head = output_manager_handle_head,
|
.head = output_manager_handle_head,
|
||||||
.done = output_manager_handle_done,
|
.done = output_manager_handle_done,
|
||||||
.finished = noop,
|
.finished = (void (*)(void *, struct zwlr_output_manager_v1 *))noop,
|
||||||
};
|
};
|
||||||
static void registry_handle_global(void *data, struct wl_registry *registry,
|
static void registry_handle_global(void *data, struct wl_registry *registry,
|
||||||
uint32_t name, const char *interface, uint32_t version) {
|
uint32_t name, const char *interface, uint32_t version) {
|
||||||
@@ -553,7 +553,7 @@ static void registry_handle_global(void *data, struct wl_registry *registry,
|
|||||||
|
|
||||||
static const struct wl_registry_listener registry_listener = {
|
static const struct wl_registry_listener registry_listener = {
|
||||||
.global = registry_handle_global,
|
.global = registry_handle_global,
|
||||||
.global_remove = noop,
|
.global_remove = (void (*)(void *, struct wl_registry *, uint32_t))noop,
|
||||||
};
|
};
|
||||||
|
|
||||||
void wd_add_output_management_listener(struct wd_state *state, struct
|
void wd_add_output_management_listener(struct wd_state *state, struct
|
||||||
@@ -603,10 +603,10 @@ static void output_name(void *data, struct zxdg_output_v1 *zxdg_output_v1,
|
|||||||
|
|
||||||
static const struct zxdg_output_v1_listener output_listener = {
|
static const struct zxdg_output_v1_listener output_listener = {
|
||||||
.logical_position = output_logical_position,
|
.logical_position = output_logical_position,
|
||||||
.logical_size = noop,
|
.logical_size = (void (*)(void *, struct zxdg_output_v1 *, int32_t, int32_t))noop,
|
||||||
.done = noop,
|
.done = (void (*)(void *, struct zxdg_output_v1 *))noop,
|
||||||
.name = output_name,
|
.name = output_name,
|
||||||
.description = noop
|
.description = (void (*)(void *, struct zxdg_output_v1 *, const char *))noop
|
||||||
};
|
};
|
||||||
|
|
||||||
void wd_add_output(struct wd_state *state, struct wl_output *wl_output,
|
void wd_add_output(struct wd_state *state, struct wl_output *wl_output,
|
||||||
|
@@ -132,7 +132,7 @@ void window_map(GtkWidget *widget, gpointer data) {
|
|||||||
&layer_surface_listener, output);
|
&layer_surface_listener, output);
|
||||||
|
|
||||||
zwlr_layer_surface_v1_set_anchor(output->overlay_layer_surface,
|
zwlr_layer_surface_v1_set_anchor(output->overlay_layer_surface,
|
||||||
ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
|
ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
|
||||||
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT);
|
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT);
|
||||||
|
|
||||||
resize(output);
|
resize(output);
|
||||||
|
Reference in New Issue
Block a user