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

📄 panel.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
字号:
#include <stdio.h>#include "fe-gtk.h"#include "../common/xchat.h"#include "../common/xchatc.h"#include "gtkutil.h"#include "wins.h"#include "maingui.h"#include "about.h"#include <applet-widget.h>static GtkWidget *panel_applet = NULL, *panel_box;static GtkWidget *panel_popup = NULL;int nopanel = FALSE;static voidpanel_invalidate (GtkWidget * wid, gpointer * arg2){	panel_applet = NULL;}voidpanel_cleanup (void){	/* When we want to exit we wipe the panel applet */	if (panel_applet != NULL) {		 applet_widget_remove (APPLET_WIDGET (panel_applet));		 panel_applet = NULL;	}}static voidcreate_panel_widget (){	panel_applet = applet_widget_new ("xchat_applet");	gtk_widget_realize (panel_applet);	if (prefs.panel_vbox)		panel_box = gtk_vbox_new (0, 0);	else		panel_box = gtk_hbox_new (0, 0);	applet_widget_add (APPLET_WIDGET (panel_applet), panel_box);	gtk_widget_show (panel_box);	gtkutil_label_new ("X-Chat:", panel_box);	applet_widget_register_stock_callback (APPLET_WIDGET (panel_applet),														"about",														GNOME_STOCK_MENU_ABOUT,														_("About..."),														GTK_SIGNAL_FUNC (menu_about), NULL);	gtk_signal_connect (GTK_OBJECT (panel_applet), "destroy", panel_invalidate,							  NULL);	/* Never save session on the panel, it wouldn't work anyhow */	gtk_signal_connect (GTK_OBJECT (panel_applet), "save_session",			    GTK_SIGNAL_FUNC (gtk_true), NULL);	gtk_widget_show (panel_applet);}static voidgui_panel_destroy_popup (GtkWidget * wid, GtkWidget * popup){	gtk_widget_destroy (panel_popup);	panel_popup = NULL;}static voidgui_panel_remove_clicked (GtkWidget * button, struct session *sess){	gtk_widget_show (sess->gui->window);	gtk_widget_destroy (sess->gui->panel_button);	sess->gui->panel_button = 0;	if (main_window)	{		wins_bring_tofront (sess->gui->window);	}	if (panel_popup)		gui_panel_destroy_popup (NULL, NULL);}static voidgui_panel_hide_clicked (GtkWidget * button, struct session *sess){	gtk_widget_hide (sess->gui->window);}static voidgui_panel_show_clicked (GtkWidget * button, struct session *sess){	gtk_widget_show (sess->gui->window);}static voidgui_panel_here_clicked (GtkWidget * button, struct session *sess){	if (sess->is_tab)	{		if (main_window)		{			gtk_widget_hide (main_window);			gtk_window_set_position (GTK_WINDOW (main_window),											 GTK_WIN_POS_MOUSE);			gtk_widget_show (main_window);		}	} else	{		gtk_widget_hide (sess->gui->window);		gtk_window_set_position (GTK_WINDOW (sess->gui->window),										 GTK_WIN_POS_MOUSE);		gtk_widget_show (sess->gui->window);	}}static voidgui_panel_destroy_view_popup (GtkWidget * popup, /* Event */ gpointer * arg2,										struct session *sess){	/* BODGE ALERT !! BODGE ALERT !! --AGL */	gtk_widget_reparent (sess->gui->textgad, sess->gui->leftpane);	gtk_box_reorder_child (GTK_BOX (sess->gui->leftpane), sess->gui->textgad,								  0);	gtk_widget_destroy (popup);}static voidgui_panel_view_clicked (GtkWidget * button, struct session *sess){	GtkWidget *view_popup;	view_popup = gtk_window_new (GTK_WINDOW_TOPLEVEL);	gtk_widget_show_all (view_popup);	gtk_widget_reparent (sess->gui->textgad, view_popup);	gtk_signal_connect (GTK_OBJECT (view_popup), "leave_notify_event",							  gui_panel_destroy_view_popup, sess);}static gintgui_panel_button_event (GtkWidget * button, GdkEvent * event,								struct session *sess){	if (event->type == GDK_BUTTON_PRESS && event->button.button == 3)	{		GtkWidget *vbox, *wid;		panel_popup = gtk_window_new (GTK_WINDOW_POPUP);		gtk_window_set_position (GTK_WINDOW (panel_popup), GTK_WIN_POS_MOUSE);		vbox = gtk_vbox_new (0, 0);		gtk_container_add (GTK_CONTAINER (panel_popup), vbox);		wid = gtk_label_new ("");		if (sess->channel[0])			gtk_label_set_text (GTK_LABEL (wid), sess->channel);		else			gtk_label_set_text (GTK_LABEL (wid), _("No Channel"));		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_label_new ("");		if (sess->server->hostname[0])			gtk_label_set_text (GTK_LABEL (wid), sess->server->servername);		else			gtk_label_set_text (GTK_LABEL (wid), _("No Server"));		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_label_new ("");		if (sess->is_tab)			gtk_label_set_text (GTK_LABEL (wid), _("Is Tab"));		else			gtk_label_set_text (GTK_LABEL (wid), _("Is Not Tab"));		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_button_new_with_label (_("Close"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gtkutil_destroy),								  sess->gui->window);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_button_new_with_label (_("Remove"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gui_panel_remove_clicked), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_button_new_with_label (_("Hide"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gui_panel_hide_clicked), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_button_new_with_label (_("Show"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gui_panel_show_clicked), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);/*		wid = gtk_button_new_with_label (_("De/Link"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (relink_window), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);*/		wid = gtk_button_new_with_label (_("Move Here"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gui_panel_here_clicked), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		wid = gtk_button_new_with_label (_("View"));		gtk_signal_connect (GTK_OBJECT (wid), "clicked",								  GTK_SIGNAL_FUNC (gui_panel_view_clicked), sess);		gtk_box_pack_start (GTK_BOX (vbox), wid, 0, 0, 0);		gtk_signal_connect (GTK_OBJECT (panel_popup), "leave_notify_event",								  gui_panel_destroy_popup, panel_popup);		gtk_widget_show_all (panel_popup);	}	return 0;}static voidmaingui_unpanelize (GtkWidget * button, struct session *sess){	if (!sess->is_tab)		gtk_widget_set_rc_style (GTK_BIN (sess->gui->panel_button)->child);	if (prefs.panelize_hide)	{		gtk_container_remove (GTK_CONTAINER (button->parent), button);		gtk_widget_destroy (button);	}	gtk_widget_show (sess->gui->window);	if (prefs.panelize_hide)		sess->gui->panel_button = 0;	if (main_window)				  /* this fixes a little refresh glitch */	{		wins_bring_tofront (sess->gui->window);	}}voidmaingui_panelize (GtkWidget *win){	char tbuf[128];	session *sess;	GSList *list;	GtkWidget *button;	/* YUK! FIXME */	list = sess_list;	while (list)	{		sess = list->data;		if (sess->gui->window == win)			break;		list = list->next;	}	if (!panel_applet)		create_panel_widget ();	if (sess->gui->panel_button != NULL)		return;	if (prefs.panelize_hide)		gtk_widget_hide (sess->gui->window);	if (sess->channel[0] == 0)		button = gtk_button_new_with_label (_("<none>"));	else		button = gtk_button_new_with_label (sess->channel);	gtk_signal_connect (GTK_OBJECT (button), "clicked",							  GTK_SIGNAL_FUNC (maingui_unpanelize), sess);	gtk_container_add (GTK_CONTAINER (panel_box), button);	gtk_signal_connect (GTK_OBJECT (button), "button_press_event",							  GTK_SIGNAL_FUNC (gui_panel_button_event), sess);	gtk_widget_show (button);	sess->gui->panel_button = button;	/* NULL the "panel_button" member when it gets destroyed */	gtk_signal_connect (GTK_OBJECT (button), "destroy",			    GTK_SIGNAL_FUNC (gtk_widget_destroyed),			    &sess->gui->panel_button);	if (sess->channel[0])	{		snprintf (tbuf, sizeof tbuf, "%s: %s", sess->server->servername,					 sess->channel);		add_tip (button, tbuf);	}}

⌨️ 快捷键说明

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