2021-11-22 20:18:56 +01:00
|
|
|
#include <dlfcn.h>
|
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
#include <gtk/gtk.h>
|
|
|
|
#include <adwaita.h>
|
|
|
|
|
2021-11-30 22:04:44 +01:00
|
|
|
#include <openmg/view/controls.h>
|
2021-11-30 22:38:48 +01:00
|
|
|
#include <openmg/view/explore.h>
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
static AdwHeaderBar *
|
2021-11-30 22:04:44 +01:00
|
|
|
create_headerbar (GtkBox *box, AdwLeaflet *views_leaflet, GtkButton **out_previous);
|
2021-10-29 22:08:49 +02:00
|
|
|
static GtkBox *
|
|
|
|
create_main_box (AdwApplicationWindow *window);
|
2021-10-31 21:06:15 +01:00
|
|
|
static void
|
|
|
|
go_back_view (GtkButton *previous, gpointer user_data);
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
static void
|
|
|
|
activate (AdwApplication *app,
|
|
|
|
gpointer user_data)
|
|
|
|
{
|
|
|
|
GtkWidget *window =
|
|
|
|
adw_application_window_new (GTK_APPLICATION (app));
|
|
|
|
GtkBox *box = create_main_box(
|
|
|
|
ADW_APPLICATION_WINDOW
|
|
|
|
(window));
|
2021-11-30 22:38:48 +01:00
|
|
|
GtkWidget *explore_view;
|
2021-10-30 04:02:10 +02:00
|
|
|
AdwLeaflet *views_leaflet = ADW_LEAFLET (adw_leaflet_new ());
|
2021-11-22 23:40:22 +01:00
|
|
|
ControlsAdwaita *controls = g_malloc (sizeof *controls);
|
2021-11-30 22:04:44 +01:00
|
|
|
GtkButton *previous = NULL;
|
|
|
|
AdwHeaderBar *header_bar = create_headerbar (box, views_leaflet, &previous);
|
2021-11-22 23:40:22 +01:00
|
|
|
|
2021-11-22 20:18:56 +01:00
|
|
|
typedef void (*swipe_back_t)(AdwLeaflet *, gboolean);
|
|
|
|
swipe_back_t swipe_back = (swipe_back_t) dlsym
|
|
|
|
(NULL, "adw_leaflet_set_can_navigate_back");
|
2021-11-22 23:40:22 +01:00
|
|
|
|
|
|
|
|
2021-11-22 20:18:56 +01:00
|
|
|
if (!swipe_back) {
|
|
|
|
swipe_back = (swipe_back_t) dlsym
|
|
|
|
(NULL, "adw_leaflet_set_can_swipe_back");
|
|
|
|
}
|
|
|
|
swipe_back (views_leaflet, 1);
|
2021-10-29 22:08:49 +02:00
|
|
|
|
2021-11-22 23:40:22 +01:00
|
|
|
controls->header = header_bar;
|
|
|
|
controls->views_leaflet = views_leaflet;
|
2021-11-30 22:04:44 +01:00
|
|
|
controls->previous = previous;
|
2021-11-30 22:38:48 +01:00
|
|
|
controls->is_set_previous = 0;
|
2021-10-29 22:08:49 +02:00
|
|
|
|
2021-11-30 22:38:48 +01:00
|
|
|
explore_view = create_explore_view (controls);
|
2021-10-29 22:08:49 +02:00
|
|
|
|
2021-11-30 22:38:48 +01:00
|
|
|
adw_leaflet_append (views_leaflet, explore_view);
|
2021-10-30 04:02:10 +02:00
|
|
|
adw_leaflet_set_can_unfold (views_leaflet, false);
|
2021-10-30 00:04:24 +02:00
|
|
|
|
2021-10-30 04:02:10 +02:00
|
|
|
gtk_box_append (box, GTK_WIDGET (views_leaflet));
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
gtk_widget_show (window);
|
|
|
|
}
|
|
|
|
|
|
|
|
static GtkBox *
|
|
|
|
create_main_box (AdwApplicationWindow *window) {
|
|
|
|
GtkWidget *box = gtk_box_new(
|
|
|
|
GTK_ORIENTATION_VERTICAL,
|
|
|
|
10);
|
|
|
|
adw_application_window_set_content(
|
|
|
|
window,
|
|
|
|
box);
|
|
|
|
return GTK_BOX (box);
|
|
|
|
}
|
|
|
|
|
2021-11-30 22:04:44 +01:00
|
|
|
|
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
static AdwHeaderBar *
|
2021-11-30 22:04:44 +01:00
|
|
|
create_headerbar (GtkBox *box, AdwLeaflet *views_leaflet, GtkButton **out_previous) {
|
2021-10-29 22:08:49 +02:00
|
|
|
GtkWidget *title =
|
|
|
|
adw_window_title_new ("Window", NULL);
|
|
|
|
GtkWidget *header =
|
|
|
|
adw_header_bar_new();
|
|
|
|
adw_header_bar_set_title_widget(
|
|
|
|
ADW_HEADER_BAR (header),
|
|
|
|
GTK_WIDGET (title));
|
|
|
|
gtk_box_append (box, header);
|
2021-10-30 00:19:29 +02:00
|
|
|
GtkWidget *previous = gtk_button_new_from_icon_name ("go-previous-symbolic");
|
2021-10-31 21:06:15 +01:00
|
|
|
g_signal_connect (G_OBJECT (previous), "clicked", G_CALLBACK (go_back_view),
|
|
|
|
views_leaflet);
|
2021-10-29 22:08:49 +02:00
|
|
|
|
2021-11-30 22:04:44 +01:00
|
|
|
if (out_previous) {
|
|
|
|
*out_previous = GTK_BUTTON (previous);
|
|
|
|
g_object_ref (*out_previous);
|
|
|
|
}
|
2021-11-22 20:18:56 +01:00
|
|
|
|
2021-10-29 22:08:49 +02:00
|
|
|
|
|
|
|
return ADW_HEADER_BAR (header);
|
|
|
|
}
|
|
|
|
|
2021-10-31 21:06:15 +01:00
|
|
|
static void
|
|
|
|
go_back_view (GtkButton *previous, gpointer user_data) {
|
|
|
|
AdwLeaflet *views_leaflet = ADW_LEAFLET (user_data);
|
|
|
|
adw_leaflet_navigate (views_leaflet, ADW_NAVIGATION_DIRECTION_BACK);
|
|
|
|
}
|
2021-11-30 22:04:44 +01:00
|
|
|
int
|
2021-10-29 22:08:49 +02:00
|
|
|
main_view_run (int argc,
|
|
|
|
char **argv)
|
|
|
|
{
|
2021-11-20 17:24:24 +01:00
|
|
|
AdwApplication *app = adw_application_new ("me.sergiotarxz.mangareader", G_APPLICATION_FLAGS_NONE);
|
|
|
|
int status = 0;
|
2021-10-29 22:08:49 +02:00
|
|
|
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
|
|
|
|
status = g_application_run (G_APPLICATION (app), argc, argv);
|
2021-11-20 17:24:24 +01:00
|
|
|
g_clear_object (&app);
|
2021-10-29 22:08:49 +02:00
|
|
|
return status;
|
|
|
|
}
|