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

📄 dock.c

📁 xmms-1.2.10.tar.gz学习使用的就下吧
💻 C
📖 第 1 页 / 共 2 页
字号:
	} while (orig_off_y != off_y);	if (slist)	{		GList *mlist = g_list_copy(slist);		/* Remove this widget from the list */		for (node = mlist; node; node = g_list_next(node))		{			dw = node->data;			if (dw->w == widget)			{				mlist = g_list_remove_link(mlist, node);				g_list_free_1(node);				break;			}		}		for (node = mlist; node;)		{			GList *temp;			gint dx, dy, dwidth, dheight;	  			dw = node->data;			dock_get_widget_pos(dw->w, &dx, &dy);			gdk_window_get_size(dw->w->window, &dwidth,&dheight);			/*			 * Find windows that are directly docked to this window,			 * move it, and any windows docked to that window again			 */			if (is_docked(x, y, w, h, dx, dy, dwidth, dheight) &&			    ((dx + dwidth) > x && dx < (x + w)))			{				mlist = g_list_remove_link(mlist, node);				g_list_free_1(node);				if (dy > y)					temp = shade_move_list(mlist, dw->w, off_y);				else if(off_y - (new_h - h) != 0)					temp = shade_move_list(mlist, dw->w, off_y - (new_h - h));				else					temp = mlist;				node = mlist = temp;			}			else				node = g_list_next(node);		}		g_list_free(mlist);	}	g_list_free(slist);	free_docked_list(docked_list);	dock_set_uposition(widget, x, y + off_y - (new_h - h));	dock_window_resize(widget, w, new_h, w, h);}static GList *resize_move_list(GList *list, GtkWidget *widget, gint offset_x, gint offset_y){	gint x,y,w,h;	GList *node;	DockedWindow *dw;	dock_get_widget_pos(widget,&x,&y);	gdk_window_get_size(widget->window, &w,&h);   	for(node = list; node;)	{		gint dx, dy, dwidth, dheight;		dw = node->data;		dock_get_widget_pos(dw->w, &dx, &dy);		gdk_window_get_size(dw->w->window, &dwidth,&dheight);		if(is_docked(x,y,w,h,dx,dy,dwidth,dheight))		{						list = g_list_remove_link(list, node);			g_list_free_1(node);						node = list = resize_move_list(list, dw->w, offset_x, offset_y);		}		else			node = g_list_next(node);	}	dock_set_uposition(widget, x + offset_x, y + offset_y);	return list;}static GList *resize_calc_offset(GList *list, GtkWidget *widget, gint offset_x, gint offset_y, gint *goffset_x, gint *goffset_y){	gint x, y, w, h;	GList *node;	DockedWindow *dw;	dock_get_widget_pos(widget, &x, &y);	gdk_window_get_size(widget->window, &w, &h);   	for(node = list; node;)	{		gint dx, dy, dwidth, dheight;		dw = node->data;		dock_get_widget_pos(dw->w, &dx, &dy);		gdk_window_get_size(dw->w->window, &dwidth,&dheight);		if (is_docked(x, y, w, h, dx, dy, dwidth, dheight))		{			if (dx + offset_x + dwidth > gdk_screen_width())			{				offset_x -= dx + offset_x + dwidth - gdk_screen_width();				(*goffset_x) -= dx + offset_x + dwidth - gdk_screen_width();			}			if (dy + offset_y + dheight > gdk_screen_height())			{				offset_y -= dy + offset_y + dheight - gdk_screen_height();				(*goffset_y) -= dy + offset_y + dheight - gdk_screen_height();			}			list = g_list_remove_link(list, node);			g_list_free_1(node);						node = list = resize_calc_offset(list, dw->w, offset_x, offset_y, goffset_x, goffset_y);		}		else			node = g_list_next(node);	}	return list;}void dock_resize(GList *window_list, GtkWidget *widget, gint new_w, gint new_h){	gint x, y, w, h;	gint dx, dy, dwidth, dheight;	gint off_x, off_y;	GList *list, *dlist = NULL, *tlist = NULL, *mlist = NULL, *node;	DockedWindow *dw;		dock_get_widget_pos(widget, &x, &y);	gdk_window_get_size(widget->window, &w, &h);	if (cfg.show_wm_decorations)	{		dock_window_resize(widget, new_w, new_h, w, h);		return;	}	list = get_docked_list(NULL, window_list,widget,0,0);	off_x = 0;	off_y = 0;	for (node = list; node; node = g_list_next(node))	{		dw = node->data;		if(dw->w != widget)		{			dock_get_widget_pos(dw->w, &dx, &dy);			gdk_window_get_size(dw->w->window,&dwidth,&dheight);			if(is_docked(x, y, w, h, dx, dy, dwidth, dheight))				dlist = g_list_append(dlist, dw);			else				mlist = g_list_append(mlist, dw);		}	}	tlist = g_list_copy(mlist);	for (node = dlist; node; node = g_list_next(node))	{		gint doff_x, doff_y;		dw = node->data;		dock_get_widget_pos(dw->w, &dx, &dy);		gdk_window_get_size(dw->w->window,&dwidth,&dheight);		if (dx - x - w == 0)			doff_x = (x + off_x + new_w) - dx;		else			doff_x = (x + off_x + (dx - x)) - dx;				  		if (dy - y - h == 0)			doff_y = (y + off_y + new_h) - dy;		else			doff_y = (y + off_y + (dy - y)) - dy;				if (dx + doff_x + dwidth > gdk_screen_width())		{			off_x -= dx + doff_x + dwidth - gdk_screen_width();			doff_x -= dx + doff_x + dwidth - gdk_screen_width();		}		if (dy + doff_y + dheight > gdk_screen_height())		{			off_y -= dy + doff_y + dheight - gdk_screen_height();			doff_y -= dy + doff_y + dheight - gdk_screen_height();		}				tlist = resize_calc_offset(tlist, dw->w, doff_x, doff_y, &off_x, &off_y);	}	if((x + off_x + new_w) > gdk_screen_width())		off_x -= x + off_x + new_w - gdk_screen_width();	if((y + off_y + new_h) > gdk_screen_height())		off_y -= y + off_y + new_h - gdk_screen_height();			g_list_free(tlist);	for(node = dlist; node; node = g_list_next(node))	{		gint doff_x, doff_y;		dw = node->data;		dock_get_widget_pos(dw->w, &dx, &dy);		if(dx - x - w == 0)			doff_x = (x + off_x + new_w) - dx;		else			doff_x = (x + off_x + (dx - x)) - dx;				if(dy - y - h == 0)			doff_y = (y + off_y + new_h) - dy;		else			doff_y = (y + off_y + (dy - y)) - dy;		mlist = resize_move_list(mlist, dw->w, doff_x, doff_y);		dock_set_uposition(dw->w, dx + doff_x, dy + doff_y);	}		   		dock_set_uposition(widget, x + off_x, y + off_y);	dock_window_resize(widget, new_w, new_h, w, h);}	void dock_move_press(GList *window_list, GtkWidget *w, GdkEventButton *event, gboolean move_list){	gint mx,my;	DockedWindow *dwin;	if (cfg.show_wm_decorations)		return;	gdk_window_raise(w->window);	gdk_window_get_pointer(w->window, &mx, &my, NULL);	gtk_object_set_data(GTK_OBJECT(w), "move_offset_x", GINT_TO_POINTER(mx));	gtk_object_set_data(GTK_OBJECT(w), "move_offset_y", GINT_TO_POINTER(my));	if (move_list)		gtk_object_set_data(GTK_OBJECT(w),"docked_list", get_docked_list(NULL,window_list,w,0,0));	else	{		dwin = g_malloc0(sizeof(DockedWindow));		dwin->w = w;		gtk_object_set_data(GTK_OBJECT(w),"docked_list", g_list_append(NULL, dwin));	}	gtk_object_set_data(GTK_OBJECT(w), "window_list", window_list);	gtk_object_set_data(GTK_OBJECT(w), "is_moving", GINT_TO_POINTER(1));}void dock_move_motion(GtkWidget *w, GdkEventMotion *event){	gint offset_x, offset_y, win_x, win_y, x, y, mx, my;	GList *dlist;	GList *window_list;	XEvent ev;	gdk_flush();	while (XCheckTypedEvent(GDK_DISPLAY(), MotionNotify, &ev));	if (!gtk_object_get_data(GTK_OBJECT(w), "is_moving"))		return;		offset_x = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(w), "move_offset_x"));	offset_y = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT(w), "move_offset_y"));	dlist = gtk_object_get_data(GTK_OBJECT(w), "docked_list");	window_list = gtk_object_get_data(GTK_OBJECT(w), "window_list");			dock_get_widget_pos(w, &win_x, &win_y);	gdk_window_get_pointer(NULL, &mx, &my, NULL);	x = mx - offset_x;	y = my - offset_y;	calc_snap_offset(dlist, window_list, x, y, &offset_x, &offset_y);	x += offset_x;	y += offset_y;	docked_list_move(dlist, x, y);}void dock_move_release(GtkWidget *w){	GList *dlist;	gtk_object_remove_data(GTK_OBJECT(w), "is_moving");	gtk_object_remove_data(GTK_OBJECT(w), "move_offset_x");	gtk_object_remove_data(GTK_OBJECT(w), "move_offset_y");	if ((dlist = gtk_object_get_data(GTK_OBJECT(w), "docked_list")) != NULL)		free_docked_list(dlist);	gtk_object_remove_data(GTK_OBJECT(w), "docked_list");	gtk_object_remove_data(GTK_OBJECT(w), "window_list");}gboolean dock_is_moving(GtkWidget *w){	if(gtk_object_get_data(GTK_OBJECT(w),"is_moving"))		return TRUE;	return FALSE;}static gboolean configure_event(GtkWidget *w, GdkEventConfigure *event, gpointer data){	gint x, y;	if (!GTK_WIDGET_VISIBLE(w))		return FALSE;		gdk_window_get_deskrelative_origin(w->window, &x, &y);	gtk_object_set_data(GTK_OBJECT(w), "window_x", GINT_TO_POINTER(x));	gtk_object_set_data(GTK_OBJECT(w), "window_y", GINT_TO_POINTER(y));	return FALSE;}	GList *dock_add_window(GList *list, GtkWidget *w){	list = g_list_append(list, w);	gtk_signal_connect(GTK_OBJECT(w), "configure_event", GTK_SIGNAL_FUNC(configure_event), NULL);	return list;}	void dock_set_uposition(GtkWidget *w, gint x, gint y){	gtk_widget_set_uposition(w, x, y);	gtk_object_set_data(GTK_OBJECT(w), "window_x", GINT_TO_POINTER(x));	gtk_object_set_data(GTK_OBJECT(w), "window_y", GINT_TO_POINTER(y));}

⌨️ 快捷键说明

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