static void chmsee_init(ChmSee* self) { self->priv = CHMSEE_GET_PRIVATE(self); selfp->home = g_build_filename(g_get_home_dir(), ".chmsee", NULL); g_debug("chmsee home = %s", selfp->home); if (!g_file_test(selfp->home, G_FILE_TEST_IS_DIR)) mkdir(selfp->home, 0777); selfp->cache_dir = g_build_filename(selfp->home, "bookshelf", NULL); if (!g_file_test(selfp->cache_dir, G_FILE_TEST_IS_DIR)) mkdir(selfp->cache_dir, 0777); selfp->lang = 0; selfp->last_dir = g_strdup(g_get_home_dir()); selfp->context_menu_link = NULL; selfp->book = NULL; selfp->pos_x = -100; selfp->pos_y = -100; selfp->width = 0; selfp->height = 0; selfp->hpaned_position = -1; selfp->has_toc = FALSE; selfp->has_index = FALSE; selfp->fullscreen = FALSE; selfp->expect_fullscreen = FALSE; selfp->state = CHMSEE_STATE_INIT; gtk_widget_add_events(GTK_WIDGET(self), GDK_STRUCTURE_MASK | GDK_BUTTON_PRESS_MASK ); g_signal_connect(G_OBJECT(self), "scroll-event", G_CALLBACK(on_scroll_event), NULL); g_signal_connect(G_OBJECT(self), "map", G_CALLBACK(on_map), NULL); g_signal_connect(G_OBJECT(self), "window-state-event", G_CALLBACK(on_window_state_event), NULL); gtk_drag_dest_set (GTK_WIDGET (self), GTK_DEST_DEFAULT_ALL, view_drop_targets, G_N_ELEMENTS (view_drop_targets), GDK_ACTION_COPY); /* Quit event handle */ g_signal_connect(G_OBJECT (self), "delete_event", G_CALLBACK (delete_cb), self); g_signal_connect(G_OBJECT (self), "destroy", G_CALLBACK (destroy_cb), self); /* Widget size changed event handle */ g_signal_connect(G_OBJECT (self), "configure-event", G_CALLBACK (on_configure_event), self); /* Init gecko */ chmsee_html_init_system(); //chmsee_html_set_default_lang(selfp->lang); populate_window(self); chmsee_load_config(self); if (selfp->pos_x >= 0 && selfp->pos_y >= 0) gtk_window_move(GTK_WINDOW (self), selfp->pos_x, selfp->pos_y); if (selfp->width > 0 && selfp->height > 0) gtk_window_resize(GTK_WINDOW (self), selfp->width, selfp->height); else gtk_window_resize(GTK_WINDOW (self), 800, 600); gtk_window_set_title(GTK_WINDOW (self), "ChmSee"); gtk_window_set_icon_from_file(GTK_WINDOW (self), get_resource_path("chmsee-icon.png"), NULL); }
static void view_pixbuf (ViewerCbInfo * info, int xid, const char *color) { GtkWidget *win; GdkColor bg_color; gint win_width, win_height; /* create toplevel window and set its title */ #ifdef ENABLE_XEMBED if (xid > 0) { GdkWindow *gdk_parent; win = gtk_plug_new (0); gdk_parent = gdk_window_foreign_new (xid); gdk_window_get_geometry (gdk_parent, NULL, NULL, &win_width, &win_height, NULL); /* so that button and key presses get registered */ gtk_widget_add_events (win, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); } else #endif { char *title; win = gtk_window_new (GTK_WINDOW_TOPLEVEL); win_width = DEFAULT_WIDTH; win_height = DEFAULT_HEIGHT; if (info->id) { title = g_strdup_printf ("%s#%s — %s", info->base_uri, info->id, _("SVG Viewer")); } else { title = g_strdup_printf ("%s — %s", info->base_uri, _("SVG Viewer")); } gtk_window_set_title (GTK_WINDOW (win), title); g_free (title); } populate_window (win, info, xid, win_width, win_height); rsvg_window_set_default_icon (GTK_WINDOW (win), info->pixbuf); /* exit when 'X' is clicked */ g_signal_connect (G_OBJECT (win), "destroy", G_CALLBACK (quit_cb), NULL); g_signal_connect (G_OBJECT (win), "delete_event", G_CALLBACK (quit_cb), NULL); if (color && strcmp (color, "none") != 0) { if (gdk_color_parse (color, &bg_color)) { GtkWidget *parent_widget = gtk_widget_get_parent (info->image); if (gdk_colormap_alloc_color (gtk_widget_get_colormap (parent_widget), &bg_color, FALSE, TRUE)) gtk_widget_modify_bg (parent_widget, GTK_STATE_NORMAL, &bg_color); else g_warning (_("Couldn't allocate color '%s'"), color); } else g_warning (_("Couldn't parse color '%s'"), color); } create_popup_menu (info); info->window = win; gtk_window_add_accel_group (GTK_WINDOW (win), info->accel_group); g_signal_connect (G_OBJECT (win), "button-press-event", G_CALLBACK (button_press_event), info); gtk_widget_show_all (win); #ifdef ENABLE_XEMBED if (xid > 0) { XReparentWindow (GDK_WINDOW_XDISPLAY (win->window), GDK_WINDOW_XID (win->window), xid, 0, 0); XMapWindow (GDK_WINDOW_XDISPLAY (win->window), GDK_WINDOW_XID (win->window)); } #endif }