Compare commits
No commits in common. "0433c1a027181028c1bd21a9370497a76e1fedb2" and "db7a28b187aa4ef8fee1a325bc493a16694a850b" have entirely different histories.
0433c1a027
...
db7a28b187
@ -164,8 +164,7 @@ open_wuffs(
|
|||||||
wuffs_format = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE;
|
wuffs_format = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL_4X16LE;
|
||||||
cairo_format = CAIRO_FORMAT_RGB30;
|
cairo_format = CAIRO_FORMAT_RGB30;
|
||||||
} else if (opaque) {
|
} else if (opaque) {
|
||||||
// BGRX doesn't have as wide swizzler support, namely in GIF.
|
wuffs_format = WUFFS_BASE__PIXEL_FORMAT__BGRX;
|
||||||
wuffs_format = WUFFS_BASE__PIXEL_FORMAT__BGRA_NONPREMUL;
|
|
||||||
cairo_format = CAIRO_FORMAT_RGB24;
|
cairo_format = CAIRO_FORMAT_RGB24;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +198,6 @@ fastiv_view_realize(GtkWidget *widget)
|
|||||||
#ifdef GDK_WINDOWING_X11
|
#ifdef GDK_WINDOWING_X11
|
||||||
// FIXME: This causes some flicker while scrolling, because it disables
|
// FIXME: This causes some flicker while scrolling, because it disables
|
||||||
// double buffering, see: https://gitlab.gnome.org/GNOME/gtk/-/issues/2560
|
// double buffering, see: https://gitlab.gnome.org/GNOME/gtk/-/issues/2560
|
||||||
// FIXME: It also breaks Tab-switching at the start of program.
|
|
||||||
//
|
//
|
||||||
// If GTK+'s OpenGL integration fails to deliver, we need to use the window
|
// If GTK+'s OpenGL integration fails to deliver, we need to use the window
|
||||||
// directly, sidestepping the toolkit entirely.
|
// directly, sidestepping the toolkit entirely.
|
||||||
|
55
fastiv.c
55
fastiv.c
@ -67,8 +67,6 @@ struct {
|
|||||||
GtkWidget *view_scroller;
|
GtkWidget *view_scroller;
|
||||||
GtkWidget *browser;
|
GtkWidget *browser;
|
||||||
GtkWidget *browser_scroller;
|
GtkWidget *browser_scroller;
|
||||||
GtkWidget *browser_paned;
|
|
||||||
GtkWidget *browser_sidebar;
|
|
||||||
} g;
|
} g;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -111,11 +109,6 @@ load_directory(const gchar *dirname)
|
|||||||
g_ptr_array_set_size(g.files, 0);
|
g_ptr_array_set_size(g.files, 0);
|
||||||
g.files_index = -1;
|
g.files_index = -1;
|
||||||
|
|
||||||
GFile *file = g_file_new_for_path(dirname);
|
|
||||||
gtk_places_sidebar_set_location(
|
|
||||||
GTK_PLACES_SIDEBAR(g.browser_sidebar), file);
|
|
||||||
g_object_unref(file);
|
|
||||||
|
|
||||||
fastiv_browser_load(FASTIV_BROWSER(g.browser), dirname);
|
fastiv_browser_load(FASTIV_BROWSER(g.browser), dirname);
|
||||||
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
@ -162,7 +155,7 @@ open(const gchar *path)
|
|||||||
|
|
||||||
gchar *uri = g_filename_to_uri(path, NULL, NULL);
|
gchar *uri = g_filename_to_uri(path, NULL, NULL);
|
||||||
if (uri) {
|
if (uri) {
|
||||||
gtk_recent_manager_add_item(gtk_recent_manager_get_default(), uri);
|
gtk_recent_manager_add_item(gtk_recent_manager_get_default(), path);
|
||||||
g_free(uri);
|
g_free(uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -251,15 +244,6 @@ on_item_activated(G_GNUC_UNUSED FastivBrowser *browser, const char *path,
|
|||||||
open(path);
|
open(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
on_open_location(G_GNUC_UNUSED GtkPlacesSidebar *sidebar, GFile *location,
|
|
||||||
G_GNUC_UNUSED GtkPlacesOpenFlags flags, G_GNUC_UNUSED gpointer user_data)
|
|
||||||
{
|
|
||||||
gchar *path = g_file_get_path(location);
|
|
||||||
load_directory(path);
|
|
||||||
g_free(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Cursor keys, e.g., simply cannot be bound through accelerators
|
// Cursor keys, e.g., simply cannot be bound through accelerators
|
||||||
// (and GtkWidget::keynav-failed would arguably be an awful solution).
|
// (and GtkWidget::keynav-failed would arguably be an awful solution).
|
||||||
//
|
//
|
||||||
@ -302,19 +286,12 @@ on_key_press(G_GNUC_UNUSED GtkWidget *widget, GdkEventKey *event,
|
|||||||
on_open();
|
on_open();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_KEY_F9:
|
|
||||||
if (gtk_widget_is_visible(g.browser_sidebar))
|
|
||||||
gtk_widget_hide(g.browser_sidebar);
|
|
||||||
else
|
|
||||||
gtk_widget_show(g.browser_sidebar);
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
case GDK_KEY_Tab:
|
case GDK_KEY_Tab:
|
||||||
case GDK_KEY_Return:
|
case GDK_KEY_Return:
|
||||||
gtk_stack_set_visible_child(GTK_STACK(g.stack),
|
gtk_stack_set_visible_child(GTK_STACK(g.stack),
|
||||||
gtk_stack_get_visible_child(GTK_STACK(g.stack)) ==
|
gtk_stack_get_visible_child(GTK_STACK(g.stack)) ==
|
||||||
g.view_scroller
|
g.view_scroller
|
||||||
? g.browser_paned
|
? g.browser_scroller
|
||||||
: g.view_scroller);
|
: g.view_scroller);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -351,7 +328,7 @@ on_button_press_view(G_GNUC_UNUSED GtkWidget *widget, GdkEventButton *event)
|
|||||||
{
|
{
|
||||||
if (!(event->state & gtk_accelerator_get_default_mod_mask()) &&
|
if (!(event->state & gtk_accelerator_get_default_mod_mask()) &&
|
||||||
event->button == 8 /* back */) {
|
event->button == 8 /* back */) {
|
||||||
gtk_stack_set_visible_child(GTK_STACK(g.stack), g.browser_paned);
|
gtk_stack_set_visible_child(GTK_STACK(g.stack), g.browser_scroller);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -435,30 +412,14 @@ main(int argc, char *argv[])
|
|||||||
g_signal_connect(g.browser, "item-activated",
|
g_signal_connect(g.browser, "item-activated",
|
||||||
G_CALLBACK(on_item_activated), NULL);
|
G_CALLBACK(on_item_activated), NULL);
|
||||||
gtk_container_add(GTK_CONTAINER(g.browser_scroller), g.browser);
|
gtk_container_add(GTK_CONTAINER(g.browser_scroller), g.browser);
|
||||||
|
|
||||||
// TODO(p): Put a GtkListBox underneath, but with subdirectories.
|
|
||||||
// - Set the scrolled window's vertical policy to nope,
|
|
||||||
// and put it inside another scrolled window.
|
|
||||||
g.browser_sidebar = gtk_places_sidebar_new();
|
|
||||||
gtk_places_sidebar_set_show_recent(
|
|
||||||
GTK_PLACES_SIDEBAR(g.browser_sidebar), FALSE);
|
|
||||||
gtk_places_sidebar_set_show_trash(
|
|
||||||
GTK_PLACES_SIDEBAR(g.browser_sidebar), FALSE);
|
|
||||||
g_signal_connect(g.browser_sidebar, "open-location",
|
|
||||||
G_CALLBACK(on_open_location), NULL);
|
|
||||||
|
|
||||||
g.browser_paned = gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
|
|
||||||
gtk_paned_add1(GTK_PANED(g.browser_paned), g.browser_sidebar);
|
|
||||||
gtk_paned_add2(GTK_PANED(g.browser_paned), g.browser_scroller);
|
|
||||||
|
|
||||||
// TODO(p): Can we not do it here separately?
|
// TODO(p): Can we not do it here separately?
|
||||||
gtk_widget_show_all(g.browser_paned);
|
gtk_widget_show_all(g.browser_scroller);
|
||||||
|
|
||||||
g.stack = gtk_stack_new();
|
g.stack = gtk_stack_new();
|
||||||
gtk_stack_set_transition_type(
|
gtk_stack_set_transition_type(
|
||||||
GTK_STACK(g.stack), GTK_STACK_TRANSITION_TYPE_NONE);
|
GTK_STACK(g.stack), GTK_STACK_TRANSITION_TYPE_NONE);
|
||||||
gtk_container_add(GTK_CONTAINER(g.stack), g.view_scroller);
|
gtk_container_add(GTK_CONTAINER(g.stack), g.view_scroller);
|
||||||
gtk_container_add(GTK_CONTAINER(g.stack), g.browser_paned);
|
gtk_container_add(GTK_CONTAINER(g.stack), g.browser_scroller);
|
||||||
|
|
||||||
g.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
g.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||||
gtk_window_set_default_size (GTK_WINDOW (g.window), 800, 600);
|
gtk_window_set_default_size (GTK_WINDOW (g.window), 800, 600);
|
||||||
@ -491,10 +452,8 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
g_free(cwd);
|
g_free(cwd);
|
||||||
|
|
||||||
if (g.files_index < 0) {
|
if (g.files_index < 0)
|
||||||
gtk_stack_set_visible_child(GTK_STACK(g.stack), g.browser_paned);
|
gtk_stack_set_visible_child(GTK_STACK(g.stack), g.browser_scroller);
|
||||||
gtk_widget_grab_focus(g.browser_scroller);
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_widget_show_all(g.window);
|
gtk_widget_show_all(g.window);
|
||||||
gtk_main();
|
gtk_main();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user