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

📄 misc.cc

📁 一个功能比较强的下载软件
💻 CC
字号:
/*	WebDownloader for X-Window *	Copyright (C) 1999-2002 Koshelev Maxim *	This Program is free but not GPL!!! You can't modify it *	without agreement with author. You can't distribute modified *	program but you can distribute unmodified program. * *	This program is distributed in the hope that it will be useful, *	but WITHOUT ANY WARRANTY; without even the implied warranty of *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *//* including stdio.h only for NULL on BSD */#include <stdio.h>#include <gtk/gtk.h>#include <gdk/gdkx.h>#include <gdk/gdkkeysyms.h>#include <X11/Xlib.h>#include <X11/Xatom.h>#include <X11/Xmd.h>#include <string.h>extern GtkWidget *MainWindow;void my_gdk_window_iconify(GdkWindow *window) {	XIconifyWindow( GDK_DISPLAY() , GDK_WINDOW_XWINDOW(window),DefaultScreen(GDK_DISPLAY()));//	XUnmapWindow( GDK_DISPLAY(), GDK_WINDOW_XWINDOW(window));};GdkPixmap *make_pixmap_from_xpm(GdkBitmap **mask,char **xpm,GtkWidget *parent) {	GtkStyle *style=gtk_widget_get_style(MainWindow);	GdkPixmap *pixmap=gdk_pixmap_create_from_xpm_d (parent->window,	                  mask,&style->bg[GTK_STATE_NORMAL] , xpm);	GdkColormap *colormap = gtk_widget_get_colormap (MainWindow);	GdkColor wait_color={0,0,0,0};	gdk_color_alloc (colormap, &wait_color);	return pixmap;};GdkPixmap *make_pixmap_from_xpm(GdkBitmap **mask,char **xpm) {	return make_pixmap_from_xpm(mask,xpm,MainWindow);};gchar *text_from_combo(GtkWidget *combo) {	if (GTK_IS_COMBO(combo))		return((gchar*)gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(combo)->entry)));	else		return((gchar*)gtk_entry_get_text(GTK_ENTRY(combo)));};void text_to_combo(GtkWidget *widget,const gchar *text) {	if (GTK_IS_COMBO(widget))		gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(widget)->entry),text);	else		if (GTK_IS_ENTRY(widget))			gtk_entry_set_text(GTK_ENTRY(widget),text);};void set_editable_for_combo(GtkWidget *widget,gboolean flag){	if (GTK_IS_COMBO(widget))		gtk_editable_set_editable(GTK_EDITABLE(GTK_COMBO(widget)->entry),flag);	else		if (GTK_IS_ENTRY(widget))			gtk_editable_set_editable(GTK_EDITABLE(widget),flag);};void motion_notify_get_coords(GdkEventMotion * event){    XEvent ev;    gint i = 0;    XSync(GDK_DISPLAY(), False);    while (XCheckTypedEvent(GDK_DISPLAY(), MotionNotify, &ev)){	event->x = ev.xmotion.x;	event->y = ev.xmotion.y;	i++;    }};char *my_xclipboard_get() {	char *buf;	int buf_size;	buf = XFetchBytes(GDK_DISPLAY(), &buf_size);	if (buf_size == 0) {// buf is null				return NULL;	}	return buf;}void my_xclipboard_put(const char *buf) {	int size;	if (buf == NULL) buf = "";	size = strlen(buf);	XStoreBytes(GDK_DISPLAY(), buf, size);/*	fprintf(stderr, "my_xplipboard_put(\"%s\");\n", buf);*/}void my_xclipboard_free(char *buf) {	if (buf) XFree(buf);}GtkWidget *my_gtk_entry_new_with_max_length(gint length, int val){	GtkWidget *entry=gtk_entry_new();	gtk_entry_set_max_length (GTK_ENTRY(entry),length);	char tmp[length+2];	g_snprintf(tmp,length+1,"%i",val);	gtk_entry_set_text(GTK_ENTRY(entry),tmp);	GtkStyle *style = gtk_widget_get_style(entry);	/*	gint real_size=gdk_string_width(gtk_style_get_font(style),"00");	real_size=(real_size*(length+1))/2+3;	gtk_widget_set_size_request(entry,real_size,-1);	*/	int real_size=length*13;	gtk_widget_set_size_request(entry,real_size>100?100:real_size,-1);	return(entry);};static Atom _XA_WIN_HINTS;static Atom _XA_WIN_LAYER;static Atom _XA_WIN_STATE;static int _xa_win_hints_allocated_=0;enum WIN_HINTS_ENUM{	WIN_HINTS_SKIP_FOCUS      = 1<<0,	WIN_HINTS_SKIP_WINLIST    = 1<<1,	WIN_HINTS_SKIP_TASKBAR    = 1<<2,	WIN_HINTS_GROUP_TRANSIENT = 1<<3,	WIN_HINTS_FOCUS_ON_CLICK  = 1<<4,	WIN_HINTS_DO_NOT_COVER    = 1<<5};#define WIN_STATE_STICKY        1#define WIN_LAYER_ONTOP		6void wm_skip_window(GtkWidget *widget){	if (!_xa_win_hints_allocated_){		_XA_WIN_HINTS = XInternAtom(GDK_DISPLAY(), "_WIN_HINTS", False);		_XA_WIN_LAYER = XInternAtom(GDK_DISPLAY(), "_WIN_LAYER", False);		_XA_WIN_STATE = XInternAtom(GDK_DISPLAY(), "_WIN_STATE", False);		_xa_win_hints_allocated_=1;	};	/* set always on top flag (GNOME) */	XEvent xev;	gint prev_error;//FIXME:	prev_error = gdk_error_warnings;//FIXME:	gdk_error_warnings = 0;	xev.type = ClientMessage;	xev.xclient.type = ClientMessage;	xev.xclient.window = GDK_WINDOW_XWINDOW(widget->window);	xev.xclient.message_type = _XA_WIN_LAYER;	xev.xclient.format = 32;	xev.xclient.data.l[0] = (CARD32) WIN_LAYER_ONTOP;	XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), False,		   SubstructureNotifyMask, (XEvent *) & xev);//FIXME:	gdk_error_warnings = prev_error;	/* set sticky */	xev.type = ClientMessage;	xev.xclient.type = ClientMessage;	xev.xclient.window = GDK_WINDOW_XWINDOW(widget->window);	xev.xclient.message_type = _XA_WIN_STATE;	xev.xclient.format = 32;	xev.xclient.data.l[0] = WIN_STATE_STICKY;	xev.xclient.data.l[1] = WIN_STATE_STICKY;	XSendEvent(GDK_DISPLAY(), GDK_ROOT_WINDOW(), False,	    	   SubstructureNotifyMask, (XEvent *) & xev);	/* set skip flags (GNOME) */ 	long data[1];	data[0] = WIN_HINTS_SKIP_FOCUS |		WIN_HINTS_SKIP_WINLIST |		WIN_HINTS_SKIP_TASKBAR;	XChangeProperty(GDK_DISPLAY(), GDK_WINDOW_XWINDOW(widget->window), _XA_WIN_HINTS,			XA_CARDINAL, 32, PropModeReplace,			(unsigned char *) data,			1);};/* write to buffer "nice" string representation of percentage: * %2.1f	- if 99 <= percent < 100 * 100		- if percent >= 100 * %2.0f		- overwise * (plus stuff to avoid unneeded "100.0" because of rounding... */void d4x_percent_str(float percent, char *buf, int bufsize) {	if (percent >= 99) {		if (percent < 99.9)			g_snprintf(buf, bufsize, "%2.1f", percent);		else if (percent < 100)			g_snprintf(buf, bufsize, "%2.1f", 99.9);		else			g_snprintf(buf, bufsize, "100");	} else {		g_snprintf(buf, bufsize, "%2.0f", percent);	}}static gint _esc_handler_(GtkWidget *widget,GdkEvent *event,gpointer pointer){	if (event && event->type == GDK_KEY_PRESS) {		GdkEventKey *kevent=(GdkEventKey *)event;		switch(kevent->keyval) {		case GDK_Escape:{			g_signal_emit_by_name(G_OBJECT(widget),					      "delete_event",					      widget,event,pointer);			return TRUE;			break;		};		};	};	return FALSE;};void d4x_eschandler_init(GtkWidget *widget,gpointer data){	g_signal_connect(G_OBJECT(widget),			 "key_press_event",			 (GtkSignalFunc)_esc_handler_, data);};void gtk_tree_model_swap_rows_l(GtkTreeModel *model,GtkTreeIter *a,GtkTreeIter *b){	gint num=gtk_tree_model_get_n_columns(model);	GValue values[num];	gint i;	for (i=0;i<num;i++){		values[i].g_type=0;		gtk_tree_model_get_value(model,a,i,&(values[i]));	};	for (i=0;i<num;i++){		GValue val={0,};		gtk_tree_model_get_value(model,b,i,&val);		gtk_list_store_set_value(GTK_LIST_STORE(model),a,i,&val);		g_value_unset(&val);	};	for (i=0;i<num;i++)		gtk_list_store_set_value(GTK_LIST_STORE(model),b,i,&(values[i]));	for (i=0;i<num;i++)		g_value_unset(&(values[i]));};

⌨️ 快捷键说明

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