Support for tabbed

This commit makes it possible to use zathura inside of tabbed by
running zathura with the -e argument.
This commit is contained in:
Moritz Lipp 2010-06-16 20:24:31 +02:00
parent 59a6c7c560
commit 824b56a032

View file

@ -150,7 +150,7 @@ struct
{ {
struct struct
{ {
GtkWindow *window; GtkWidget *window;
GtkBox *box; GtkBox *box;
GtkBox *continuous; GtkBox *continuous;
GtkScrolledWindow *view; GtkScrolledWindow *view;
@ -162,6 +162,7 @@ struct
GtkWidget *information; GtkWidget *information;
GtkWidget *drawing_area; GtkWidget *drawing_area;
GtkWidget *document; GtkWidget *document;
GdkNativeWindow embed;
} UI; } UI;
struct struct
@ -472,8 +473,13 @@ init_zathura()
Zathura.FileMonitor.monitor = NULL; Zathura.FileMonitor.monitor = NULL;
/* window */
if(Zathura.UI.embed)
Zathura.UI.window = gtk_plug_new(Zathura.UI.embed);
else
Zathura.UI.window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
/* UI */ /* UI */
Zathura.UI.window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
Zathura.UI.box = GTK_BOX(gtk_vbox_new(FALSE, 0)); Zathura.UI.box = GTK_BOX(gtk_vbox_new(FALSE, 0));
Zathura.UI.continuous = GTK_BOX(gtk_vbox_new(FALSE, 0)); Zathura.UI.continuous = GTK_BOX(gtk_vbox_new(FALSE, 0));
Zathura.UI.view = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL)); Zathura.UI.view = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
@ -485,10 +491,10 @@ init_zathura()
Zathura.UI.document = gtk_event_box_new(); Zathura.UI.document = gtk_event_box_new();
/* window */ /* window */
gtk_window_set_title(Zathura.UI.window, "zathura"); gtk_window_set_title(GTK_WINDOW(Zathura.UI.window), "zathura");
GdkGeometry hints = { 1, 1 }; GdkGeometry hints = { 1, 1 };
gtk_window_set_geometry_hints(Zathura.UI.window, NULL, &hints, GDK_HINT_MIN_SIZE); gtk_window_set_geometry_hints(GTK_WINDOW(Zathura.UI.window), NULL, &hints, GDK_HINT_MIN_SIZE);
gtk_window_set_default_size(Zathura.UI.window, DEFAULT_WIDTH, DEFAULT_HEIGHT); gtk_window_set_default_size(GTK_WINDOW(Zathura.UI.window), DEFAULT_WIDTH, DEFAULT_HEIGHT);
g_signal_connect(G_OBJECT(Zathura.UI.window), "destroy", G_CALLBACK(cb_destroy), NULL); g_signal_connect(G_OBJECT(Zathura.UI.window), "destroy", G_CALLBACK(cb_destroy), NULL);
/* box */ /* box */
@ -869,7 +875,7 @@ close_file(gboolean keep_monitor)
free(Zathura.PDF.pages); free(Zathura.PDF.pages);
g_object_unref(Zathura.PDF.document); g_object_unref(Zathura.PDF.document);
g_free(Zathura.State.pages); g_free(Zathura.State.pages);
gtk_window_set_title(Zathura.UI.window, "zathura"); gtk_window_set_title(GTK_WINDOW(Zathura.UI.window), "zathura");
Zathura.State.pages = g_strdup_printf(""); Zathura.State.pages = g_strdup_printf("");
Zathura.State.filename = (char*) DEFAULT_TEXT; Zathura.State.filename = (char*) DEFAULT_TEXT;
@ -1159,7 +1165,7 @@ open_file(char* path, char* password)
} }
/* set window title */ /* set window title */
gtk_window_set_title(Zathura.UI.window, basename(file)); gtk_window_set_title(GTK_WINDOW(Zathura.UI.window), basename(file));
/* show document */ /* show document */
set_page(start_page); set_page(start_page);
@ -3675,21 +3681,39 @@ cb_watch_file(GFileMonitor* monitor, GFile* file, GFile* other_file, GFileMonito
/* main function */ /* main function */
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
/* embed */
Zathura.UI.embed = 0;
/* parse arguments */
int i;
for(i = 1; i < argc && argv[i][0] == '-' && argv[i][1] != '\0'; i++)
{
switch(argv[i][1])
{
case 'e':
if(++i < argc)
Zathura.UI.embed = atoi(argv[i]);
break;
}
}
g_thread_init(NULL); g_thread_init(NULL);
gdk_threads_init(); gdk_threads_init();
gtk_init(&argc, &argv); gtk_init(&argc, &argv);
init_zathura(); init_zathura();
init_directories(); init_directories();
if(argc >= 2) if(argc >= i+1)
open_file(argv[1], (argc == 3) ? argv[2] : NULL); open_file(argv[i], (argc == i+2) ? argv[i+1] : NULL);
switch_view(Zathura.UI.document); switch_view(Zathura.UI.document);
update_status(); update_status();
gtk_widget_show_all(GTK_WIDGET(Zathura.UI.window)); gtk_widget_show_all(GTK_WIDGET(Zathura.UI.window));
gtk_widget_grab_focus(GTK_WIDGET(Zathura.UI.view));
gdk_threads_enter(); gdk_threads_enter();
gtk_main(); gtk_main();