Skip to content

Commit 6c3817b

Browse files
committed
Pass mime types to open dialog
1 parent 0eb7b21 commit 6c3817b

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

zathura/shortcuts.c

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1540,19 +1540,30 @@ bool sc_snap_to_page(girara_session_t* session, girara_argument_t* UNUSED(argume
15401540

15411541
bool sc_file_chooser(girara_session_t* session, girara_argument_t* UNUSED(argument), girara_event_t* UNUSED(event),
15421542
unsigned int UNUSED(t)) {
1543-
GtkFileChooserNative *native;
1544-
GtkFileChooser *chooser;
1545-
gint res;
1543+
g_return_val_if_fail(session != NULL, false);
1544+
g_return_val_if_fail(session->global.data != NULL, false);
1545+
zathura_t* zathura = session->global.data;
15461546

1547-
native = gtk_file_chooser_native_new("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, "_Open", "_Cancel");
1548-
chooser = GTK_FILE_CHOOSER( native );
1547+
GtkFileChooserNative* native =
1548+
gtk_file_chooser_native_new("Open File", NULL, GTK_FILE_CHOOSER_ACTION_OPEN, "_Open", "_Cancel");
1549+
GtkFileChooser* chooser = GTK_FILE_CHOOSER(native);
1550+
1551+
GtkFileFilter* filter = gtk_file_filter_new();
1552+
girara_list_t* mime_types = zathura_plugin_manager_get_content_types(zathura->plugins.manager);
1553+
if (mime_types) {
1554+
for (size_t idx = 0; idx != girara_list_size(mime_types); ++idx) {
1555+
const char* mime_type = girara_list_nth(mime_types, idx);
1556+
girara_debug("adding mime type to %s to filter", mime_type);
1557+
gtk_file_filter_add_mime_type(filter, mime_type);
1558+
}
1559+
gtk_file_chooser_add_filter(chooser, filter);
1560+
} else {
1561+
g_object_unref(filter);
1562+
}
15491563

1550-
res = gtk_native_dialog_run (GTK_NATIVE_DIALOG(native));
1564+
const gint res = gtk_native_dialog_run(GTK_NATIVE_DIALOG(native));
15511565
if (res == GTK_RESPONSE_ACCEPT) {
1552-
char *filename;
1553-
zathura_t* zathura = session->global.data;
1554-
1555-
filename = gtk_file_chooser_get_filename(chooser);
1566+
char* filename = gtk_file_chooser_get_filename(chooser);
15561567
if (!document_close(zathura, false)) {
15571568
g_free(filename);
15581569
goto error;
@@ -1567,7 +1578,7 @@ bool sc_file_chooser(girara_session_t* session, girara_argument_t* UNUSED(argume
15671578
}
15681579

15691580
g_object_unref(native);
1570-
return true;
1581+
return true;
15711582

15721583
error:
15731584

0 commit comments

Comments
 (0)