⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 linux-gtk的开发,在linux环境下的gtk库的开发
💻 C
📖 第 1 页 / 共 2 页
字号:
			locale_file_name( g_file_name, furl);
			g_print( "%s\n", furl);
			read_url( furl, 1, g_document->current_stream);
		}
	}		
}


static void link_clicked( HtmlDocument* doc, const gchar* url)
{
	g_print("%s link clicked: %s!\n", url);
}

static gboolean url_requested(HtmlDocument *doc, const gchar* url, HtmlStream* stream)
{	
	char furl[PATH_MAX] = {0};	
	
	if( strstr( url, "://")) {//absolute path		
		g_stpcpy( furl, url);		
		
	} else {//relative path
		if( strstr( g_file_name, "://")) {//网络请求			
			if( strstr( dirname( g_file_name), "://")) {
				g_stpcpy( furl, dirname( g_file_name));
				
			} else {
				g_stpcpy( furl, g_file_name);
			}
			//if( furl[strlen(furl)-1] != '/')
				g_strlcat( furl, "/", sizeof( furl));
			g_strlcat( furl, url, sizeof( furl));
			
		} else {
			g_stpcpy( furl, "file://");
			g_strlcat( furl, dirname( g_file_name), sizeof( furl));
			g_strlcat( furl, "\\", sizeof( furl));
			g_strlcat( furl, url, sizeof( furl));
		}
	}
	
	g_print("%s requested\n", furl);
	
	read_url( furl, 0, stream);	
	return TRUE;
}

static gboolean
request_object (HtmlView *view, GtkWidget *widget, gpointer user_data)
{
	GtkWidget *sel;

	sel = gtk_color_selection_new ();
	gtk_widget_show (sel);

	gtk_container_add (GTK_CONTAINER (widget), sel);

	return TRUE;
}

G_MODULE_EXPORT void on_comb_changed( GtkWidget *widget, gpointer user_data)
{
	g_print("Selected item changed\n");
	static iitem = -1;
	if( g_is_trans == FALSE 
		&& gtk_combo_box_get_active( GTK_COMBO_BOX(g_combox)) != iitem) {
		if( g_file_name) g_free(g_file_name),g_file_name=NULL;
		g_file_name = gtk_combo_box_get_active_text( GTK_COMBO_BOX(g_combox));
		char furl[PATH_MAX] = {0};
		if( strlen( g_file_name) > 0) {
			html_view_set_document (HTML_VIEW (g_view), NULL);
			html_document_clear( g_document);
			html_view_set_document(HTML_VIEW(g_view), g_document);
			html_document_open_stream( g_document, "text/html");
			locale_file_name( g_file_name, furl);
			g_print( "%s\n", furl);
			read_url( furl, 0, NULL);
		}
	}	
}

G_MODULE_EXPORT void on_okbut_clicked( GtkWidget *widget, gpointer user_data)
{
	g_print("Button clicked\n");
	if( g_file_name) g_free(g_file_name),g_file_name=NULL;
	if( g_is_trans == FALSE) {
		g_file_name = gtk_combo_box_get_active_text( GTK_COMBO_BOX(g_combox)); 
		char furl[PATH_MAX] = {0};
		if( strlen( g_file_name) > 0) {
			html_view_set_document (HTML_VIEW (g_view), NULL);
			html_document_clear( g_document);
			html_view_set_document(HTML_VIEW(g_view), g_document);
			html_document_open_stream( g_document, "text/html");			
			locale_file_name( g_file_name, furl);
			g_print( "%s\n", furl);
			read_url( furl, 0, NULL);
		}
	}		
}

G_MODULE_EXPORT void on_win_delete_event( GtkWidget *widget, gpointer user_data)
{
	g_print("Window deleted\n");
	gtk_main_quit();	
}

G_MODULE_EXPORT void on_quit_activate( GtkWidget *widget, gpointer user_data)
{
	g_print("Application terminated\n");
	gtk_main_quit();
}

G_MODULE_EXPORT void  on_logwin_window_state_event( GtkWidget *widget,  GdkEventWindowState *event, gpointer user_data)
{
	g_print( "Window manager event %x\n", event->new_window_state);
	if( event->new_window_state ==  GDK_WINDOW_STATE_ICONIFIED) {
		g_print( "Window hidden\n");
		g_is_refr = FALSE;
		
	} else if( event->new_window_state == 0) {
		g_print( "Window showed\n");
		gtk_widget_queue_draw( g_win);
		g_is_refr = TRUE;
	}
}

/** open file browser */
G_MODULE_EXPORT void on_open_activate (GtkWidget *widget, gpointer user_data) 
{	
	GtkWidget *dialog;
	if( g_file_name) {
		g_free( g_file_name);
		g_file_name = NULL;
	}
	dialog = gtk_file_chooser_dialog_new ("选择本地文件",
					      GTK_WINDOW(gtk_widget_get_toplevel( widget)),
					      GTK_FILE_CHOOSER_ACTION_OPEN,
					      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
					      GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
					      NULL);
	if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT){
		g_file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
	}
	gtk_widget_destroy( dialog);
	
	if( g_is_trans == FALSE) {
		char furl[PATH_MAX] = {0};
		if( g_file_name && strlen( g_file_name) > 0) {
			html_view_set_document( HTML_VIEW (g_view), NULL);
			html_document_clear( g_document);
			html_view_set_document(HTML_VIEW(g_view), g_document);
			html_document_open_stream( g_document, "text/html");			
			locale_file_name( g_file_name, furl);
			g_print( "%s\n", furl);
			read_url( furl, 1, NULL);
		}
	}		
}

/* G_MODULE_EXPORT GtkWidget* create_html_widget(gchar *widget_name, gchar *string1, gchar *string2,
									  gint int1, gint int2)
{
	//New the view
	g_view = html_view_new();							
	// This is very important 
	gtk_widget_show_all( g_view);
	return g_view;
} */

int main(int argc, char *argv[]) 
{
    GladeXML* 		xml = NULL;
	GMainLoop*		loop = NULL;
	
	/* init gtk library*/
	gtk_init(&argc, &argv);	
	
	
    /* load the interface */
    xml = glade_xml_new("browser.glade", NULL, NULL);

	/* get main window widget*/
	g_win = glade_xml_get_widget( xml, "browser");	
	/* get combboxenty widget*/
	g_combox = glade_xml_get_widget( xml, "comboboxentry1");    
	/* get child of combboxentry --GtkEntry*/
	g_signal_connect(GTK_ENTRY( GTK_BIN(g_combox)->child), 
					"activate",
					G_CALLBACK(on_comb_editing_done),
					NULL);
	/*init libgtkhtml*/
	g_object_set( G_OBJECT( gtk_html_context_get()),
				"debug_painting", FALSE, NULL);
	/* create new html document*/			
	g_document = html_document_new();
	g_signal_connect(G_OBJECT (g_document), "request_url",
				G_CALLBACK (url_requested), NULL);
	g_signal_connect (G_OBJECT (g_document), "link_clicked",
				G_CALLBACK (link_clicked), NULL);
				
/* 	g_signal_connect (G_OBJECT (g_document), "dom_mouse_down",
			  G_CALLBACK (dom_mouse_down), NULL);
	g_signal_connect (G_OBJECT (g_document), "dom_mouse_up",
			  G_CALLBACK (dom_mouse_up), NULL);
	g_signal_connect (G_OBJECT (g_document), "dom_mouse_click",
			  G_CALLBACK (dom_mouse_click), NULL);
	g_signal_connect (G_OBJECT (g_document), "dom_mouse_over",
			  G_CALLBACK (dom_mouse_over), NULL);
	g_signal_connect (G_OBJECT (g_document), "dom_mouse_out",
			  G_CALLBACK (dom_mouse_out), NULL); */
			  
	/*sync with scrolled window*/
/* 	GtkWidget* sw = glade_xml_get_widget( xml, "scrolledwindow1");
	gtk_scrolled_window_set_hadjustment( GTK_SCROLLED_WINDOW( sw),
								gtk_layout_get_hadjustment( GTK_LAYOUT( g_view)));
	gtk_scrolled_window_set_vadjustment( GTK_SCROLLED_WINDOW( sw),
								gtk_layout_get_vadjustment( GTK_LAYOUT( g_view)));	 */							

	/* And the view */
	g_view = html_view_new();	
	g_signal_connect(G_OBJECT( g_view), "request_object",
			  G_CALLBACK( request_object), NULL);
	GtkWidget* sw = gtk_scrolled_window_new( gtk_layout_get_hadjustment( GTK_LAYOUT( g_view)),
				       gtk_layout_get_vadjustment( GTK_LAYOUT( g_view)));
	gtk_container_add( GTK_CONTAINER( sw), g_view);
	gtk_container_add( GTK_CONTAINER( glade_xml_get_widget( xml, "frame1")), sw);

	
	/* connect the signals in the interface */
    glade_xml_signal_autoconnect( xml);			  
	/* init glibcurl */
	glibcurl_init();
	loop = g_main_loop_new(NULL, TRUE);
	glibcurl_set_callback( &curlCallback, loop);
	
	/* link the document and view */
	html_view_set_document( HTML_VIEW( g_view), g_document);	
	
	/* important*/
	gtk_widget_show_all( g_win);
	
	/* start the event loop */
    gtk_main();
	
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -