Exemplo n.º 1
0
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);

}
Exemplo n.º 2
0
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
}