bool send_message( Display* dpy, /* display */ Window w, /* sender (tray icon window) */ long message, /* message opcode */ long data1, /* message data 1 */ long data2, /* message data 2 */ long data3 /* message data 3 */ ){ XEvent ev; memset(&ev, 0, sizeof(ev)); ev.xclient.type = ClientMessage; ev.xclient.window = w; ev.xclient.message_type = XInternAtom (dpy, "_NET_SYSTEM_TRAY_OPCODE", False ); ev.xclient.format = 32; ev.xclient.data.l[0] = CurrentTime; ev.xclient.data.l[1] = message; ev.xclient.data.l[2] = data1; ev.xclient.data.l[3] = data2; ev.xclient.data.l[4] = data3; trap_errors(); XSendEvent(dpy, w, False, NoEventMask, &ev); XSync(dpy, False); return untrap_errors(); }
bool XMessages::send_message_internal( WId w_P, const QString& msg_P, long mask_P, Display* disp, Atom atom1_P, Atom atom2_P, Window handle_P ) { unsigned int pos = 0; QByteArray msg = msg_P.toUtf8(); unsigned int len = msg.size(); // originally strlen ( QCString(msg_P) ), is it different ? --- J. Verner XEvent e; e.xclient.type = ClientMessage; e.xclient.message_type = atom1_P; // leading message e.xclient.display = disp; e.xclient.window = handle_P; e.xclient.format = 8; trap_errors(); do { unsigned int i; for( i = 0; i < 20 && i + pos <= len; ++i ) e.xclient.data.b[ i ] = msg[ i + pos ]; XSendEvent( disp, w_P, False, mask_P, &e ); e.xclient.message_type = atom2_P; // following messages pos += i; } while( pos <= len ); XSync( disp, False ); return untrap_errors(); }