diff --git a/src/bazaar.gresource.xml b/src/bazaar.gresource.xml
index c1eb1899..3c055b29 100644
--- a/src/bazaar.gresource.xml
+++ b/src/bazaar.gresource.xml
@@ -36,7 +36,7 @@
bz-releases-list.ui
bz-releases-dialog.ui
bz-rich-app-tile.ui
- bz-screenshot-dialog.ui
+ bz-screenshot-page.ui
bz-screenshots-carousel.ui
bz-search-widget.ui
bz-section-view.ui
diff --git a/src/bz-full-view.blp b/src/bz-full-view.blp
index 79b84590..9b776a8f 100644
--- a/src/bz-full-view.blp
+++ b/src/bz-full-view.blp
@@ -500,6 +500,7 @@ template $BzFullView: Adw.Bin {
vexpand: true;
hexpand: true;
visible: bind template.debounced-ui-entry as <$BzResult>.resolved as ;
+ clicked => $screenshot_clicked_cb() swapped;
model: $BzLazyAsyncTextureModel {
model: bind template.debounced-ui-entry as <$BzResult>.object as <$BzEntry>.screenshot-paintables;
diff --git a/src/bz-full-view.c b/src/bz-full-view.c
index e439da8c..a4d2d082 100644
--- a/src/bz-full-view.c
+++ b/src/bz-full-view.c
@@ -23,7 +23,6 @@
#include
#include
-#include "bz-application.h"
#include "bz-addons-dialog.h"
#include "bz-app-size-dialog.h"
#include "bz-app-tile.h"
@@ -40,6 +39,7 @@
#include "bz-lazy-async-texture-model.h"
#include "bz-license-dialog.h"
#include "bz-releases-list.h"
+#include "bz-screenshot-page.h"
#include "bz-screenshots-carousel.h"
#include "bz-section-view.h"
#include "bz-share-list.h"
@@ -61,17 +61,17 @@ struct _BzFullView
BzResult *group_model;
gboolean show_sidebar;
- guint debounce_timeout;
- DexFuture *loading_forge_stars;
+ guint debounce_timeout;
+ DexFuture *loading_forge_stars;
GMenuModel *main_menu;
/* Template widgets */
GtkScrolledWindow *main_scroll;
- AdwViewStack *stack;
- GtkWidget *shadow_overlay;
- GtkWidget *forge_stars;
- GtkLabel *forge_stars_label;
- GtkToggleButton *description_toggle;
+ AdwViewStack *stack;
+ GtkWidget *shadow_overlay;
+ GtkWidget *forge_stars;
+ GtkLabel *forge_stars_label;
+ GtkToggleButton *description_toggle;
};
G_DEFINE_FINAL_TYPE (BzFullView, bz_full_view, ADW_TYPE_BIN)
@@ -199,8 +199,8 @@ bz_full_view_set_property (GObject *object,
case PROP_DEBOUNCED_UI_ENTRY:
case PROP_MAIN_MENU:
if (self->main_menu)
- g_object_unref(self->main_menu);
- self->main_menu = g_value_dup_object(value);
+ g_object_unref (self->main_menu);
+ self->main_menu = g_value_dup_object (value);
break;
case PROP_SHOW_SIDEBAR:
self->show_sidebar = g_value_get_boolean (value);
@@ -450,66 +450,66 @@ pick_license_warning (gpointer object,
static char *
format_other_apps_label (gpointer object, const char *developer)
{
- if (!developer || *developer == '\0')
- return g_strdup (_("Other Apps by this Developer"));
+ if (!developer || *developer == '\0')
+ return g_strdup (_ ("Other Apps by this Developer"));
- return g_strdup_printf (_("Other Apps by %s"), developer);
+ return g_strdup_printf (_ ("Other Apps by %s"), developer);
}
static gpointer
filter_own_app_id (BzEntry *entry, GtkStringList *app_ids)
{
- const char *own_id;
- g_autoptr (GtkStringList) filtered = NULL;
- guint n_items = 0;
+ const char *own_id;
+ g_autoptr (GtkStringList) filtered = NULL;
+ guint n_items = 0;
- if (!BZ_IS_ENTRY(entry) || !GTK_IS_STRING_LIST(app_ids))
- return NULL;
+ if (!BZ_IS_ENTRY (entry) || !GTK_IS_STRING_LIST (app_ids))
+ return NULL;
- own_id = bz_entry_get_id (entry);
- if (!own_id)
- return NULL;
+ own_id = bz_entry_get_id (entry);
+ if (!own_id)
+ return NULL;
- filtered = gtk_string_list_new (NULL);
- n_items = g_list_model_get_n_items (G_LIST_MODEL (app_ids));
+ filtered = gtk_string_list_new (NULL);
+ n_items = g_list_model_get_n_items (G_LIST_MODEL (app_ids));
- for (guint i = 0; i < n_items; i++)
- {
- const char *id = NULL;
+ for (guint i = 0; i < n_items; i++)
+ {
+ const char *id = NULL;
- id = gtk_string_list_get_string (app_ids, i);
- if (g_strcmp0 (id, own_id) != 0)
- gtk_string_list_append (filtered, id);
- }
+ id = gtk_string_list_get_string (app_ids, i);
+ if (g_strcmp0 (id, own_id) != 0)
+ gtk_string_list_append (filtered, id);
+ }
- if (g_list_model_get_n_items (G_LIST_MODEL (filtered)) > 0)
- return g_steal_pointer (&filtered);
- else
- return NULL;
+ if (g_list_model_get_n_items (G_LIST_MODEL (filtered)) > 0)
+ return g_steal_pointer (&filtered);
+ else
+ return NULL;
}
static gboolean
-has_other_apps (gpointer object, GtkStringList *app_ids, BzEntry *entry )
+has_other_apps (gpointer object, GtkStringList *app_ids, BzEntry *entry)
{
- g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids);
- return filtered != NULL;
+ g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids);
+ return filtered != NULL;
}
static GListModel *
get_developer_apps_entries (gpointer object, GtkStringList *app_ids, BzEntry *entry)
{
- BzFullView *self = BZ_FULL_VIEW (object);
- g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids);
- BzApplicationMapFactory *factory;
+ BzFullView *self = BZ_FULL_VIEW (object);
+ g_autoptr (GtkStringList) filtered = filter_own_app_id (BZ_ENTRY (entry), app_ids);
+ BzApplicationMapFactory *factory;
- if (!filtered)
- return NULL;
+ if (!filtered)
+ return NULL;
- factory = bz_state_info_get_application_factory (self->state);
- if (!factory)
- return NULL;
+ factory = bz_state_info_get_application_factory (self->state);
+ if (!factory)
+ return NULL;
- return bz_application_map_factory_generate (factory, G_LIST_MODEL (filtered));
+ return bz_application_map_factory_generate (factory, G_LIST_MODEL (filtered));
}
static gboolean
@@ -521,10 +521,10 @@ scroll_to_top_idle (GtkAdjustment *vadj)
static void
app_tile_clicked_cb (BzFullView *self,
- BzAppTile *tile)
+ BzAppTile *tile)
{
GtkAdjustment *vadj;
- BzEntryGroup *group = bz_app_tile_get_group (tile);
+ BzEntryGroup *group = bz_app_tile_get_group (tile);
bz_full_view_set_entry_group (self, group);
@@ -534,20 +534,20 @@ app_tile_clicked_cb (BzFullView *self,
static void
bind_app_tile_cb (BzFullView *self,
- BzAppTile *tile,
- BzEntryGroup *group,
- BzDynamicListView *view)
+ BzAppTile *tile,
+ BzEntryGroup *group,
+ BzDynamicListView *view)
{
g_signal_connect_swapped (tile, "clicked",
- G_CALLBACK (app_tile_clicked_cb),
- self);
+ G_CALLBACK (app_tile_clicked_cb),
+ self);
}
static void
unbind_app_tile_cb (BzFullView *self,
- BzAppTile *tile,
- BzEntryGroup *group,
- BzDynamicListView *view)
+ BzAppTile *tile,
+ BzEntryGroup *group,
+ BzDynamicListView *view)
{
g_signal_handlers_disconnect_by_func (tile, G_CALLBACK (app_tile_clicked_cb), self);
}
@@ -630,6 +630,26 @@ dl_stats_cb (BzFullView *self,
bz_stats_dialog_animate_open (BZ_STATS_DIALOG (dialog));
}
+static void
+screenshot_clicked_cb (BzFullView *self,
+ guint index,
+ BzScreenshotsCarousel *carousel)
+{
+ GListModel *screenshots = NULL;
+ AdwNavigationPage *page = NULL;
+ GtkWidget *nav_view = NULL;
+
+ screenshots = bz_screenshots_carousel_get_model (carousel);
+ if (screenshots == NULL)
+ return;
+
+ page = bz_screenshot_page_new (screenshots, index);
+
+ nav_view = gtk_widget_get_ancestor (GTK_WIDGET (self), ADW_TYPE_NAVIGATION_VIEW);
+ if (nav_view != NULL)
+ adw_navigation_view_push (ADW_NAVIGATION_VIEW (nav_view), page);
+}
+
static void
size_cb (BzFullView *self,
GtkButton *button)
@@ -861,18 +881,18 @@ bz_full_view_class_init (BzFullViewClass *klass)
G_PARAM_READABLE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
props[PROP_MAIN_MENU] =
- g_param_spec_object(
- "main-menu",
- NULL, NULL,
- G_TYPE_MENU_MODEL,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ g_param_spec_object (
+ "main-menu",
+ NULL, NULL,
+ G_TYPE_MENU_MODEL,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
props[PROP_SHOW_SIDEBAR] =
- g_param_spec_boolean(
- "show-sidebar",
- NULL, NULL,
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
+ g_param_spec_boolean (
+ "show-sidebar",
+ NULL, NULL,
+ FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_EXPLICIT_NOTIFY);
g_object_class_install_properties (object_class, LAST_PROP, props);
@@ -982,6 +1002,7 @@ bz_full_view_class_init (BzFullViewClass *klass)
gtk_widget_class_bind_template_callback (widget_class, open_flathub_url_cb);
gtk_widget_class_bind_template_callback (widget_class, license_cb);
gtk_widget_class_bind_template_callback (widget_class, dl_stats_cb);
+ gtk_widget_class_bind_template_callback (widget_class, screenshot_clicked_cb);
gtk_widget_class_bind_template_callback (widget_class, size_cb);
gtk_widget_class_bind_template_callback (widget_class, formfactor_cb);
gtk_widget_class_bind_template_callback (widget_class, run_cb);
diff --git a/src/bz-screenshot-dialog.blp b/src/bz-screenshot-page.blp
similarity index 88%
rename from src/bz-screenshot-dialog.blp
rename to src/bz-screenshot-page.blp
index 5c884555..c388fe2d 100644
--- a/src/bz-screenshot-dialog.blp
+++ b/src/bz-screenshot-page.blp
@@ -1,21 +1,41 @@
using Gtk 4.0;
using Adw 1;
-template $BzScreenshotDialog: Adw.Dialog {
- content-width: 1600;
- content-height: 900;
+
+template $BzScreenshotPage: Adw.NavigationPage {
+ title: _("Screenshots");
+
child: Adw.ToastOverlay toast_overlay {
child: Adw.ToolbarView {
top-bar-style: flat;
extend-content-to-top-edge: true;
- styles ["view-dark"]
+
+ styles [
+ "view-dark",
+ ]
+
[top]
Adw.HeaderBar {
styles [
"flat",
"header-osd",
]
+
show-title: false;
+
+ [end]
+ Box {
+ Button copy_button {
+ icon-name: "edit-copy-symbolic";
+ tooltip-text: _("Copy Image");
+ clicked => $copy_clicked() swapped;
+
+ styles [
+ "flat",
+ ]
+ }
+ }
}
+
content: Overlay {
[overlay]
Box {
@@ -25,44 +45,38 @@ template $BzScreenshotDialog: Adw.Dialog {
margin-bottom: 12;
margin-start: 12;
spacing: 6;
+
Box navigation_controls {
orientation: horizontal;
spacing: 6;
visible: bind $has_multiple_screenshots(template.screenshots) as ;
+
styles [
"osd-box",
]
+
Button previous_button {
icon-name: "go-previous-symbolic";
tooltip-text: _("Previous Screenshot");
clicked => $previous_clicked() swapped;
+
styles [
"flat",
]
}
+
Button next_button {
icon-name: "go-next-symbolic";
tooltip-text: _("Next Screenshot");
clicked => $next_clicked() swapped;
- styles [
- "flat",
- ]
- }
- }
- Box {
- styles [
- "osd-box",
- ]
- Button copy_button {
- icon-name: "copy-symbolic";
- tooltip-text: _("Copy Image");
- clicked => $copy_clicked() swapped;
+
styles [
"flat",
]
}
}
}
+
[overlay]
Box {
orientation: horizontal;
@@ -70,41 +84,51 @@ template $BzScreenshotDialog: Adw.Dialog {
valign: end;
margin-bottom: 12;
margin-end: 12;
+
Box zoom_controls {
orientation: horizontal;
+
styles [
"osd-box",
]
+
Revealer {
reveal-child: bind template.is-zoomed as ;
transition-type: slide_right;
+
Button reset_zoom_button {
icon-name: "zoom-original-symbolic";
tooltip-text: _("Reset View");
clicked => $reset_zoom_clicked() swapped;
+
styles [
"flat",
]
}
}
+
Button zoom_out_button {
icon-name: "zoom-minus-symbolic";
tooltip-text: _("Zoom Out");
clicked => $zoom_out_clicked() swapped;
+
styles [
"flat",
]
}
+
Button zoom_in_button {
icon-name: "zoom-plus-symbolic";
tooltip-text: _("Zoom In");
clicked => $zoom_in_clicked() swapped;
+
styles [
"flat",
]
}
}
}
+
child: Adw.Carousel carousel {
can-focus: false;
interactive: bind $invert_boolean(template.is-zoomed) as ;
@@ -116,4 +140,4 @@ template $BzScreenshotDialog: Adw.Dialog {
};
};
};
-}
\ No newline at end of file
+}
diff --git a/src/bz-screenshot-dialog.c b/src/bz-screenshot-page.c
similarity index 79%
rename from src/bz-screenshot-dialog.c
rename to src/bz-screenshot-page.c
index 99d680ef..9af530ad 100644
--- a/src/bz-screenshot-dialog.c
+++ b/src/bz-screenshot-page.c
@@ -1,4 +1,4 @@
-/* bz-screenshot-dialog.c
+/* bz-screenshot-page.c
*
* Copyright 2025 Alexander Vanhee
*
@@ -18,14 +18,14 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
-#include "bz-screenshot-dialog.h"
+#include "bz-screenshot-page.h"
#include "bz-screenshot.h"
#include "bz-zoom.h"
#include
-struct _BzScreenshotDialog
+struct _BzScreenshotPage
{
- AdwDialog parent_instance;
+ AdwNavigationPage parent_instance;
AdwCarousel *carousel;
AdwToastOverlay *toast_overlay;
@@ -37,11 +37,11 @@ struct _BzScreenshotDialog
gboolean is_zoomed;
};
-G_DEFINE_FINAL_TYPE (BzScreenshotDialog, bz_screenshot_dialog, ADW_TYPE_DIALOG)
+G_DEFINE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, ADW_TYPE_NAVIGATION_PAGE)
-static void on_zoom_level_changed (BzZoom *zoom,
- GParamSpec *pspec,
- BzScreenshotDialog *self);
+static void on_zoom_level_changed (BzZoom *zoom,
+ GParamSpec *pspec,
+ BzScreenshotPage *self);
enum
{
@@ -56,22 +56,22 @@ enum
static GParamSpec *props[LAST_PROP] = { 0 };
static void
-bz_screenshot_dialog_dispose (GObject *object)
+bz_screenshot_page_dispose (GObject *object)
{
- BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object);
+ BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object);
g_clear_object (&self->screenshots);
- G_OBJECT_CLASS (bz_screenshot_dialog_parent_class)->dispose (object);
+ G_OBJECT_CLASS (bz_screenshot_page_parent_class)->dispose (object);
}
static void
-bz_screenshot_dialog_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+bz_screenshot_page_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object);
+ BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object);
switch (prop_id)
{
@@ -90,7 +90,7 @@ bz_screenshot_dialog_get_property (GObject *object,
}
static void
-populate_carousel (BzScreenshotDialog *self)
+populate_carousel (BzScreenshotPage *self)
{
guint n_items = 0;
guint i = 0;
@@ -117,6 +117,10 @@ populate_carousel (BzScreenshotDialog *self)
screenshot = bz_screenshot_new ();
bz_screenshot_set_paintable (BZ_SCREENSHOT (screenshot), GDK_PAINTABLE (async_texture));
bz_screenshot_set_rounded_corners (BZ_SCREENSHOT (screenshot), FALSE);
+ gtk_widget_set_margin_top (screenshot, 25);
+ gtk_widget_set_margin_bottom (screenshot, 25);
+ gtk_widget_set_margin_start (screenshot, 25);
+ gtk_widget_set_margin_end (screenshot, 25);
zoom_widget = bz_zoom_new ();
gtk_widget_set_hexpand (zoom_widget, TRUE);
@@ -128,7 +132,7 @@ populate_carousel (BzScreenshotDialog *self)
}
static void
-update_is_zoomed (BzScreenshotDialog *self)
+update_is_zoomed (BzScreenshotPage *self)
{
GtkWidget *page = NULL;
BzZoom *zoom = NULL;
@@ -164,16 +168,16 @@ update_is_zoomed (BzScreenshotDialog *self)
}
static void
-on_zoom_level_changed (BzZoom *zoom,
- GParamSpec *pspec,
- BzScreenshotDialog *self)
+on_zoom_level_changed (BzZoom *zoom,
+ GParamSpec *pspec,
+ BzScreenshotPage *self)
{
update_is_zoomed (self);
}
static void
-connect_zoom_signal (BzScreenshotDialog *self,
- GtkWidget *page)
+connect_zoom_signal (BzScreenshotPage *self,
+ GtkWidget *page)
{
BzZoom *zoom = NULL;
@@ -186,12 +190,12 @@ connect_zoom_signal (BzScreenshotDialog *self,
}
static void
-bz_screenshot_dialog_constructed (GObject *object)
+bz_screenshot_page_constructed (GObject *object)
{
- BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object);
- GtkWidget *page = NULL;
+ BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object);
+ GtkWidget *page = NULL;
- G_OBJECT_CLASS (bz_screenshot_dialog_parent_class)->constructed (object);
+ G_OBJECT_CLASS (bz_screenshot_page_parent_class)->constructed (object);
populate_carousel (self);
@@ -205,12 +209,12 @@ bz_screenshot_dialog_constructed (GObject *object)
}
static void
-bz_screenshot_dialog_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+bz_screenshot_page_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
{
- BzScreenshotDialog *self = BZ_SCREENSHOT_DIALOG (object);
+ BzScreenshotPage *self = BZ_SCREENSHOT_PAGE (object);
switch (prop_id)
{
@@ -227,7 +231,7 @@ bz_screenshot_dialog_set_property (GObject *object,
}
static void
-zoom_in_clicked (BzScreenshotDialog *self)
+zoom_in_clicked (BzScreenshotPage *self)
{
GtkWidget *page = NULL;
BzZoom *zoom = NULL;
@@ -246,7 +250,7 @@ zoom_in_clicked (BzScreenshotDialog *self)
}
static void
-zoom_out_clicked (BzScreenshotDialog *self)
+zoom_out_clicked (BzScreenshotPage *self)
{
GtkWidget *page = NULL;
BzZoom *zoom = NULL;
@@ -265,7 +269,7 @@ zoom_out_clicked (BzScreenshotDialog *self)
}
static void
-reset_zoom_clicked (BzScreenshotDialog *self)
+reset_zoom_clicked (BzScreenshotPage *self)
{
GtkWidget *page = NULL;
BzZoom *zoom = NULL;
@@ -284,7 +288,7 @@ reset_zoom_clicked (BzScreenshotDialog *self)
}
static void
-previous_clicked (BzScreenshotDialog *self)
+previous_clicked (BzScreenshotPage *self)
{
guint n_pages = 0;
GtkWidget *page = NULL;
@@ -303,7 +307,7 @@ previous_clicked (BzScreenshotDialog *self)
}
static void
-next_clicked (BzScreenshotDialog *self)
+next_clicked (BzScreenshotPage *self)
{
guint n_pages = 0;
GtkWidget *page = NULL;
@@ -322,9 +326,9 @@ next_clicked (BzScreenshotDialog *self)
}
static void
-on_carousel_position_changed (AdwCarousel *carousel,
- GParamSpec *pspec,
- BzScreenshotDialog *self)
+on_carousel_position_changed (AdwCarousel *carousel,
+ GParamSpec *pspec,
+ BzScreenshotPage *self)
{
GtkWidget *old_page = NULL;
GtkWidget *new_page = NULL;
@@ -360,7 +364,7 @@ on_carousel_position_changed (AdwCarousel *carousel,
}
static void
-copy_clicked (BzScreenshotDialog *self)
+copy_clicked (BzScreenshotPage *self)
{
g_autoptr (BzAsyncTexture) async_texture = NULL;
g_autoptr (GdkTexture) texture = NULL;
@@ -399,7 +403,7 @@ on_key_pressed (GtkEventControllerKey *controller,
guint keyval,
guint keycode,
GdkModifierType state,
- BzScreenshotDialog *self)
+ BzScreenshotPage *self)
{
if (keyval == GDK_KEY_Left)
{
@@ -433,15 +437,15 @@ invert_boolean (gpointer object,
}
static void
-bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass)
+bz_screenshot_page_class_init (BzScreenshotPageClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- object_class->dispose = bz_screenshot_dialog_dispose;
- object_class->constructed = bz_screenshot_dialog_constructed;
- object_class->get_property = bz_screenshot_dialog_get_property;
- object_class->set_property = bz_screenshot_dialog_set_property;
+ object_class->dispose = bz_screenshot_page_dispose;
+ object_class->constructed = bz_screenshot_page_constructed;
+ object_class->get_property = bz_screenshot_page_get_property;
+ object_class->set_property = bz_screenshot_page_set_property;
props[PROP_SCREENSHOTS] =
g_param_spec_object (
@@ -468,9 +472,9 @@ bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass)
g_type_ensure (BZ_TYPE_ZOOM);
- gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshot-dialog.ui");
- gtk_widget_class_bind_template_child (widget_class, BzScreenshotDialog, carousel);
- gtk_widget_class_bind_template_child (widget_class, BzScreenshotDialog, toast_overlay);
+ gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshot-page.ui");
+ gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, carousel);
+ gtk_widget_class_bind_template_child (widget_class, BzScreenshotPage, toast_overlay);
gtk_widget_class_bind_template_callback (widget_class, zoom_in_clicked);
gtk_widget_class_bind_template_callback (widget_class, zoom_out_clicked);
gtk_widget_class_bind_template_callback (widget_class, on_carousel_position_changed);
@@ -483,7 +487,7 @@ bz_screenshot_dialog_class_init (BzScreenshotDialogClass *klass)
}
static void
-bz_screenshot_dialog_init (BzScreenshotDialog *self)
+bz_screenshot_page_init (BzScreenshotPage *self)
{
GtkEventController *key_controller = NULL;
@@ -495,12 +499,12 @@ bz_screenshot_dialog_init (BzScreenshotDialog *self)
gtk_widget_add_controller (GTK_WIDGET (self), key_controller);
}
-AdwDialog *
-bz_screenshot_dialog_new (GListModel *screenshots,
- guint initial_index)
+AdwNavigationPage *
+bz_screenshot_page_new (GListModel *screenshots,
+ guint initial_index)
{
return g_object_new (
- BZ_TYPE_SCREENSHOT_DIALOG,
+ BZ_TYPE_SCREENSHOT_PAGE,
"screenshots", screenshots,
"current-index", initial_index,
NULL);
diff --git a/src/bz-screenshot-dialog.h b/src/bz-screenshot-page.h
similarity index 71%
rename from src/bz-screenshot-dialog.h
rename to src/bz-screenshot-page.h
index df4053ff..dfad1192 100644
--- a/src/bz-screenshot-dialog.h
+++ b/src/bz-screenshot-page.h
@@ -1,4 +1,4 @@
-/* bz-screenshot-dialog.h
+/* bz-screenshot-page.h
*
* Copyright 2025 Alexander Vanhee
*
@@ -25,11 +25,11 @@
G_BEGIN_DECLS
-#define BZ_TYPE_SCREENSHOT_DIALOG (bz_screenshot_dialog_get_type ())
+#define BZ_TYPE_SCREENSHOT_PAGE (bz_screenshot_page_get_type ())
-G_DECLARE_FINAL_TYPE (BzScreenshotDialog, bz_screenshot_dialog, BZ, SCREENSHOT_DIALOG, AdwDialog)
+G_DECLARE_FINAL_TYPE (BzScreenshotPage, bz_screenshot_page, BZ, SCREENSHOT_PAGE, AdwNavigationPage)
-AdwDialog *bz_screenshot_dialog_new (GListModel *screenshots,
- guint initial_index);
+AdwNavigationPage *bz_screenshot_page_new (GListModel *screenshots,
+ guint initial_index);
G_END_DECLS
diff --git a/src/bz-screenshots-carousel.c b/src/bz-screenshots-carousel.c
index 685bacd1..ee1f5f99 100644
--- a/src/bz-screenshots-carousel.c
+++ b/src/bz-screenshots-carousel.c
@@ -28,7 +28,6 @@
#include "bz-screenshots-carousel.h"
#include "bz-decorated-screenshot.h"
-#include "bz-screenshot-dialog.h"
#include
struct _BzScreenshotsCarousel
@@ -57,6 +56,14 @@ enum
static GParamSpec *properties[N_PROPS];
+enum
+{
+ SIGNAL_CLICKED,
+ N_SIGNALS
+};
+
+static guint signals[N_SIGNALS];
+
static void
update_button_visibility (BzScreenshotsCarousel *self)
{
@@ -134,10 +141,9 @@ on_notify_n_pages (BzScreenshotsCarousel *self)
}
static void
-open_screenshot_dialog_at_index (BzScreenshotsCarousel *self, guint index)
+open_screenshot_at_index (BzScreenshotsCarousel *self, guint index)
{
- AdwDialog *dialog = NULL;
- guint n_items;
+ guint n_items;
if (!self->model)
return;
@@ -146,8 +152,7 @@ open_screenshot_dialog_at_index (BzScreenshotsCarousel *self, guint index)
if (index >= n_items)
return;
- dialog = bz_screenshot_dialog_new (self->model, index);
- adw_dialog_present (dialog, GTK_WIDGET (gtk_widget_get_root (GTK_WIDGET (self))));
+ g_signal_emit (self, signals[SIGNAL_CLICKED], 0, index);
}
static void
@@ -177,7 +182,7 @@ on_screenshot_clicked (BzDecoratedScreenshot *screenshot, BzScreenshotsCarousel
}
}
- open_screenshot_dialog_at_index (self, index);
+ open_screenshot_at_index (self, index);
}
static void
@@ -198,7 +203,7 @@ on_expand_clicked (BzScreenshotsCarousel *self)
index = (guint) round (position);
index = MIN (index, n_pages - 1);
- open_screenshot_dialog_at_index (self, index);
+ open_screenshot_at_index (self, index);
}
static void
@@ -334,6 +339,17 @@ bz_screenshots_carousel_class_init (BzScreenshotsCarouselClass *klass)
g_object_class_install_properties (object_class, N_PROPS, properties);
+ signals[SIGNAL_CLICKED] =
+ g_signal_new ("clicked",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ NULL,
+ G_TYPE_NONE,
+ 1,
+ G_TYPE_UINT);
+
gtk_widget_class_set_template_from_resource (widget_class, "/io/github/kolunmi/Bazaar/bz-screenshots-carousel.ui");
gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, carousel);
gtk_widget_class_bind_template_child (widget_class, BzScreenshotsCarousel, carousel_indicator);
diff --git a/src/gtk/style.css b/src/gtk/style.css
index c7766a27..0eb7e74c 100644
--- a/src/gtk/style.css
+++ b/src/gtk/style.css
@@ -341,7 +341,13 @@ window.flathub {
}
.view-dark {
- background-color: #1d1d20;
+ background-color: black;
+ color: white;
+}
+
+.header-osd box.horizontal:not(.end) {
+ background-color: rgba(0, 0, 0, 0.65);
+ border-radius: 10px;
}
.accent-button {
diff --git a/src/meson.build b/src/meson.build
index 1bb39404..d539f2f3 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -118,7 +118,7 @@ bz_sources = [
'bz-review.c',
'bz-rich-app-tile.c',
'bz-rounded-picture.c',
- 'bz-screenshot-dialog.c',
+ 'bz-screenshot-page.c',
'bz-screenshot.c',
'bz-screenshots-carousel.c',
'bz-search-engine.c',
@@ -191,7 +191,7 @@ blueprints = custom_target('blueprints',
'bz-releases-dialog.blp',
'bz-releases-list.blp',
'bz-rich-app-tile.blp',
- 'bz-screenshot-dialog.blp',
+ 'bz-screenshot-page.blp',
'bz-screenshots-carousel.blp',
'bz-search-widget.blp',
'bz-section-view.blp',