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

📄 tray.c

📁 linux的多线程下载工具。基于gtk界面。
💻 C
📖 第 1 页 / 共 2 页
字号:
 /* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- *//*   Modified by chice <chice_wxg@hotmail.com> in 2004*//* tray.c * * Copyright (C) 2003-2003 Joakim Ziegler <joakim@avmaria.com> * * Parts taken from the Gaim docklet plugin, * Copyright (C) 2002-3 Robert McQueen  <robot101@debian.org> * Copyright (C) 2003   Herman Bloggs   <hermanator12002@yahoo.com> * Copyright (C) 2002   Anders Carlsson <andersca@gnu.org> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * 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.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * * Authors: Joakim Ziegler <joakim@avmaria.com> */#include <glib.h>#include <gtk/gtk.h>/* XPM */static char *xpm_tray[]={"28 28 119 2","Qt c None",".0 c #0000ff",".J c #0080ff",".6 c #0682f9",".2 c #0c86f2",".Z c #0d86f2","## c #1989e5","#. c #198ce5","#x c #808080","#S c #848484","#y c #878787","#w c #8c8181","#H c #909090","#R c #939393","#G c #957979","#T c #969696","#z c #9c9c9c","#A c #9e9e9e","#B c #a0a0a0","#s c #a3a3a3","#r c #a6a0a0","#t c #a8a8a8","#N c #a9a9a9","#q c #aa9d9d","#M c #b14e4e","#U c #b1b1b1","#Q c #b3b3b3","#I c #bebebe","#X c #bfbfbf","#Y c #c2c2c2","#l c #c4c4c4","#P c #c6c6c6","#O c #cbcbcb","#W c #cdcdcd","#u c #cecece","#L c #cf3030","#Z c #cfcfcf","#F c #d76565","#E c #d85e5e","#C c #d8d8d8","#K c #dd3e3e","#k c #de9f9f","#0 c #e2e2e2","#V c #e3e3e3",".n c #e6dddd","#c c #e6dede",".b c #e6dfdf",".h c #e6e4e4",".g c #e7d8d8","#v c #e86969",".f c #e8cfcf",".Q c #e8d1d1",".a c #eab5b5",".t c #eab6b6",".e c #eabcbc","#b c #eabebe",".9 c #ebb5b5",".V c #eca7a7",".# c #eda1a1",".P c #ee9898",".m c #ef8d8d","#D c #f02121",".s c #f08383",".r c #f17878","#j c #f26d6d",".z c #f36262","#J c #f36464",".u c #f36767","#f c #f55858",".W c #f64d4d",".d c #f64e4e",".l c #f74545",".3 c #f7fb07",".5 c #f83838",".q c #f83939",".k c #f83e3e",".G c #f92e2e",".O c #f93030","#g c #fa2626",".U c #fa2929","#d c #fb0204",".y c #fb1616","#m c #fb2020",".j c #fc1515",".c c #fc1717",".x c #fd0a0a",".X c #fd0b0b","#a c #fd0c0c",".D c #fde501","#n c #fe0303",".w c #fe0505",".T c #fe0707","#e c #fe0808",".4 c #fefe01",".i c #ff0000",".A c #ff0100","#p c #ff0400",".F c #ff0700",".B c #ff0900","#o c #ff0b00",".7 c #ff0d00",".H c #ff0e00",".M c #ff1900",".Y c #ff2200","#i c #ff2a00",".o c #ff3400",".1 c #ff4800",".L c #ff4d00",".E c #ff5500",".I c #ff6200",".p c #ff6d00",".C c #ff7a00","#h c #ff7e00",".8 c #ff8c00",".K c #ffae00",".N c #ffb200",".S c #ffe600",".R c #fff300",".v c #ffff00","QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQtQt.#.#.#.#.#.#.a.bQtQtQtQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQt.c.c.c.c.c.c.c.d.e.f.g.hQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQt.i.i.i.i.i.i.i.j.k.l.m.nQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQt.i.i.i.o.p.p.o.i.i.i.q.r.s.tQtQtQtQtQt","QtQtQtQtQtQtQtQt.u.i.i.i.p.v.v.v.i.i.i.w.x.y.sQtQtQtQtQt","QtQtQtQtQtQtQtQt.z.i.A.B.C.v.v.v.v.D.E.F.A.i.i.l.fQtQtQt","QtQtQtQtQtQtQtQt.G.i.H.I.v.v.J.J.v.v.K.L.F.i.i.l.fQtQtQt","QtQtQtQtQtQtQt.i.i.i.M.N.v.v.J.J.J.v.v.K.E.i.i.O.P.QQtQt","QtQtQtQtQtQtQt.i.i.i.M.v.v.v.J.J.J.v.v.R.S.i.i.T.U.VQtQt","QtQtQtQtQtQt.W.i.i.i.v.v.v.J.J.J.J.v.v.v.v.i.i.i.c.#QtQt","QtQtQtQtQtQt.X.i.i.Y.v.v.v.Z.J.J.0.v.v.v.v.p.o.i.c.#QtQt","QtQtQtQtQtQt.X.i.i.1.v.v.J.Z.J.J.v.v.v.v.v.v.p.i.c.#QtQt","QtQtQtQtQtQt.X.A.F.v.v.v.J.2.J.J.v.v.v.3.4.v.i.i.c.#QtQt","QtQtQtQtQt.5.w.F.L.v.v.v.J.J.6.J.J.J.v.v.v.i.i.i.c.#QtQt","QtQtQtQtQt.i.i.7.8.v.v.J.J.J.J.J.J.J.J.v.v.i.i.j.d.9QtQt","QtQtQtQt.l.i.i.7.8.v.v.J#.#.#.#.#.##.J.v.i.i#a.d#b#cQtQt","QtQtQtQt.l.i.i.7.v.v.3.v.v.v.v.v.v.v.v.i#d#e#f.a.bQtQtQt","QtQtQtQt#g.i.i.7.v.v.v.v.v.v.v.v.8#h#i.i.i#j#k#lQtQtQtQt","QtQtQt#m#n.i.i.7.v.v.v.v.v.v.7.7.7#o#p.i.i#q#r#s#t#uQtQt","QtQtQt.c.i.i.i.i.i.i.i.i.i.i.i.i#n.x.X#v#w#x#y#z#A#B#B#C","QtQtQt.c.i.i.i.i.i.i.i.i.i.i.i.i#D#E#F#G#x#x#x#x#H#B#B#I","QtQtQt#J#K#L#L#L#L#L#L#L#L#L#L#L#M#x#x#x#x#x#x#x#H#B#N#O","QtQtQtQt#P#Q#Q#Q#Q#Q#Q#R#x#x#x#x#x#x#x#x#x#x#S#T#N#U#O#V","QtQtQtQtQtQtQtQtQtQtQt#W#X#X#X#X#X#X#X#X#X#X#Y#Z#C#C#0Qt","QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt","QtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQtQt"};//GtkWidget *tntc_get_widget (const gchar *name);//#define W(w)               tntc_get_widget (w)#include <string.h>#include <gdk/gdkx.h>#include "tray.h"#include "interface.h"#include "callbacks.h"#define SYSTEM_TRAY_REQUEST_DOCK    0#define SYSTEM_TRAY_BEGIN_MESSAGE   1#define SYSTEM_TRAY_CANCEL_MESSAGE  2         static GtkPlugClass *parent_class = NULL;static EggTrayIcon *docklet = NULL;static GtkWidget *image = NULL;static void egg_tray_icon_init (EggTrayIcon *icon);static void egg_tray_icon_class_init (EggTrayIconClass *klass);static void egg_tray_icon_unrealize (GtkWidget *widget);static void egg_tray_icon_update_manager_window (EggTrayIcon *icon);GTypeegg_tray_icon_get_type (void){  static GType our_type = 0;  our_type = g_type_from_name("EggTrayIcon");  if (our_type == 0)    {      static const GTypeInfo our_info =      {	sizeof (EggTrayIconClass),	(GBaseInitFunc) NULL,	(GBaseFinalizeFunc) NULL,	(GClassInitFunc) egg_tray_icon_class_init,	NULL, /* class_finalize */	NULL, /* class_data */	sizeof (EggTrayIcon),	0,    /* n_preallocs */	(GInstanceInitFunc) egg_tray_icon_init      };      our_type = g_type_register_static (GTK_TYPE_PLUG, "EggTrayIcon", &our_info, 0);    }  else if (parent_class == NULL) {    /* we're reheating the old class from a previous instance -  engage ugly hack =( */    egg_tray_icon_class_init((EggTrayIconClass *)g_type_class_peek(our_type));  }  return our_type;}static voidegg_tray_icon_init (EggTrayIcon *icon){  icon->stamp = 1;    gtk_widget_add_events (GTK_WIDGET (icon), GDK_PROPERTY_CHANGE_MASK);}static voidegg_tray_icon_class_init (EggTrayIconClass *klass){  GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;  parent_class = g_type_class_peek_parent (klass);  widget_class->unrealize = egg_tray_icon_unrealize;}static GdkFilterReturnegg_tray_icon_manager_filter (GdkXEvent *xevent, GdkEvent *event, gpointer user_data){  EggTrayIcon *icon = user_data;  XEvent *xev = (XEvent *)xevent;  //dprintf (__PRETTY_FUNCTION__);  if (xev->xany.type == ClientMessage &&      xev->xclient.message_type == icon->manager_atom &&      xev->xclient.data.l[1] == icon->selection_atom)    {      egg_tray_icon_update_manager_window (icon);    }  else if (xev->xany.window == icon->manager_window)    {      if (xev->xany.type == DestroyNotify)	{	  egg_tray_icon_update_manager_window (icon);	}    }    return GDK_FILTER_CONTINUE;}static voidegg_tray_icon_unrealize (GtkWidget *widget){  EggTrayIcon *icon = EGG_TRAY_ICON (widget);  GdkWindow *root_window;  if (icon->manager_window != None)    {      GdkWindow *gdkwin;#if HAVE_GTK_MULTIHEAD      gdkwin = gdk_window_lookup_for_display (gtk_widget_get_display (widget),                                              icon->manager_window);#else      gdkwin = gdk_window_lookup (icon->manager_window);#endif      gdk_window_remove_filter (gdkwin, egg_tray_icon_manager_filter, icon);    }#if HAVE_GTK_MULTIHEAD  root_window = gdk_screen_get_root_window (gtk_widget_get_screen (widget));#else  root_window = gdk_window_lookup (gdk_x11_get_default_root_xwindow ());#endif  gdk_window_remove_filter (root_window, egg_tray_icon_manager_filter, icon);  if (GTK_WIDGET_CLASS (parent_class)->unrealize)    (* GTK_WIDGET_CLASS (parent_class)->unrealize) (widget);}static voidegg_tray_icon_send_manager_message (EggTrayIcon *icon,				    long         message,				    Window       window,				    long         data1,				    long         data2,				    long         data3){  XClientMessageEvent ev;  Display *display;    //dprintf (__PRETTY_FUNCTION__);  ev.type = ClientMessage;  ev.window = window;  ev.message_type = icon->system_tray_opcode_atom;  ev.format = 32;  ev.data.l[0] = gdk_x11_get_server_time (GTK_WIDGET (icon)->window);  ev.data.l[1] = message;  ev.data.l[2] = data1;  ev.data.l[3] = data2;  ev.data.l[4] = data3;#if HAVE_GTK_MULTIHEAD  display = GDK_DISPLAY_XDISPLAY (gtk_widget_get_display (GTK_WIDGET (icon)));#else  display = gdk_display;#endif    gdk_error_trap_push ();  XSendEvent (display,	      icon->manager_window, False, NoEventMask, (XEvent *)&ev);  XSync (display, False);  gdk_error_trap_pop ();}static voidegg_tray_icon_send_dock_request (EggTrayIcon *icon){  //dprintf (__PRETTY_FUNCTION__);  egg_tray_icon_send_manager_message (icon,				      SYSTEM_TRAY_REQUEST_DOCK,

⌨️ 快捷键说明

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