LINUX.ORG.RU

Иконку в трей


0

0

Ладно... про готовое не отвечают...

Дайте пример (я думаю, что они должны существовать) минимальной программы, которая делает иконку как у GAIM'a.

Буду индикатор загрузки проца делать :)

★★★★

Ответ на: Re: Иконку в трей от fk0

Re: Иконку в трей

В винде это называлось system tray. Как это правильно в линуксе я не знаю.

В общем куда GAIM пихает свою иконку туда и нужно. :)

В fluxbox-е это выглядит очень мило :)

alexru ★★★★ ()
Ответ на: Re: Иконку в трей от Pi

Re: Иконку в трей

По мсдну скучается :)

Я привык когда есть готовый, компилируемый пример, чтобы скомпилировалось за 5 минут, запустилось и потом менять и можифицировать все.

Так вот. :)

alexru ★★★★ ()
Ответ на: Re: Иконку в трей от alexru

Re: Иконку в трей

include <X11/Xlib.h>  
#include <X11/Xatom.h>  
#include <X11/Xutil.h>  


#include <cstdlib> 
#include <iostream> 
using namespace std;


int main(){

    Display * dpy = XOpenDisplay(getenv("DISPLAY"));
    Atom atom = XInternAtom(dpy, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False);

    Window base_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 100, 100, 100, 100, 0, 0,
    Window tray_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 10, 10, 10, 10, 0, 0, 0);


    XSelectInput(dpy, tray_window,
                 ButtonPressMask
                 | ButtonReleaseMask
                 | PointerMotionMask
                 | ExposureMask
                 | EnterWindowMask
                 | LeaveWindowMask
                 | KeyPressMask
                 | KeyReleaseMask
                 );


    XChangeProperty(dpy, tray_window, atom, XA_WINDOW, 32, PropModeAppend,
    (unsigned char *) &base_window, 1);

    XMapWindow(dpy, tray_window);

    XEvent ev;

    /* infinite event loop */
    for (;;){

        do
        {
            do
            {
                XNextEvent(dpy, &ev);


            }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
        while (XPending(dpy));

    }





    return 0;
}


$ g++ -lX11 file


anonymous ()
Ответ на: Re: Иконку в трей от anonymous

Re: Иконку в трей

Коряво скопировал.
еще раз:


#include <X11/Xlib.h>  
#include <X11/Xatom.h>  
#include <X11/Xutil.h>  


#include <cstdlib> 
#include <iostream> 
using namespace std;


int main(){

    Display * dpy = XOpenDisplay(getenv("DISPLAY"));
    Atom atom = XInternAtom(dpy, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False);

    Window base_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 100, 100, 100, 100, 0, 0, 0);
    Window tray_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 10, 10, 10, 10, 0, 0, 0);


    XSelectInput(dpy, tray_window,
                 ButtonPressMask
                 | ButtonReleaseMask
                 | PointerMotionMask
                 | ExposureMask
                 | EnterWindowMask
                 | LeaveWindowMask
                 | KeyPressMask
                 | KeyReleaseMask
                 );


    XChangeProperty(dpy, tray_window, atom, XA_WINDOW, 32, PropModeAppend,
    (unsigned char *) &base_window, 1);

    XMapWindow(dpy, tray_window);



    XEvent ev;
    /* infinite event loop */
    for (;;){

        do
        {
            do
            {
                  XNextEvent(dpy, &ev);


            }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
        while (XPending(dpy));

    }





    return 0;
}


anonymous ()
Ответ на: Re: Иконку в трей от anonymous

Re: Иконку в трей

alexru:~/work$ g++ -lX11 tst.c
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status


все заголовочные файлы стоят. библиотека libX11 есть

alexru ★★★★ ()
Ответ на: Re: Иконку в трей от fk0

Re: Иконку в трей

> > _KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR 
>   ^^^^ ну-ну...

И?
автор задавал вопрос применительно к Флюксу. А флюкс поддерживает именно этот атом и гномовский. 

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.