Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.os.linux.programowanie > #2136

Re: Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!?

Newsgroups pl.comp.os.linux.programowanie
Date 2018-11-18 07:12 -0800
References <3f0b46d3-b511-4b74-abbf-88d6d175040f@googlegroups.com> <9009417e-0ac4-4fa3-8f45-f4ae3d4031cf@googlegroups.com>
Message-ID <7d4b9cba-4973-41b0-ac70-aecd4fbb88be@googlegroups.com> (permalink)
Subject Re: Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!?
From szykcech@gmail.com

Show all headers | View raw


Może będą to czytać małe dzieci, które chcą nauczyć się programować - więc...

Dobrą praktyką programistyczną jest wyłączanie specyficznego kodu do plików łatwo identyfikowalnych. W tym przypadku mam takie pliki:
+ Application.h : z deklaracją kasy aplikacji służącej do obsługi gniazdka lokalnego i tłumaczeń
+ Application.cpp : z definicją funkcji klas kodowanych niezależnie od systemu operacyjnego.
+ Application.Linux.cpp : z definicją funkcji specyficznych dla systemu operacyjnego Linux (są one wyłączone do osobnego, łatwo zauważalnego pliku - to jest właśnie ta "dobra praktyka")
+ Application.Windows.cpp : funkcje zakodowane z użyciem Api systemu Windows.

Każdy nowy system jaki bym wspierał musi mieć odpowiedni plik Application.XXX.cpp w mojej aplikacji (wynika to z tego, że nie mam czegoś takiego jak "domyślne zachowanie" w razie braku funkcji specyficznych).

W pliku pro dodaje się wtedy dyrektywę kompilacji warunkowej:
linux: SOURCES += Src/Application.Linux.cpp
win32: SOURCES += Src/Application.Windows.cpp
(w innych systemach budowania są podobne możliwości)

Natomiast mój plik Application.Linux.cpp wygląda tak:

#include "Application.h"
#include <X11/Xlib.h>
#include <X11/Xos.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>

quint32 Application::currentDesktopNumber()
{
    Display* lDisplay = XOpenDisplay(nullptr);
    int lScreen = DefaultScreen(lDisplay);
    Window lRootWindow = RootWindow(lDisplay, lScreen);
    Atom lAtom(XInternAtom(lDisplay, "_NET_CURRENT_DESKTOP", True));
    if(lAtom == None)
        qFatal("no atom\n");

    unsigned long nitems, leftover;
    unsigned char* lData = nullptr;
    int actual_format;
    Atom actual_type;

//    if(XGetWindowProperty(lDisplay, lRootWindow, lAtom, 0L, 8, False, AnyPropertyType, nullptr, nullptr, nullptr, nullptr, &lData) != Success)
    if(XGetWindowProperty(lDisplay, lRootWindow, lAtom, 0L, 8, False, AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover, &lData) != Success)
        qFatal("XGetWindowProperty failed!");

    quint32 lResult = lData[0];
    delete [] lData;

    return lResult;
}

void Application::raiseAnotherInstance(quint32 /*aProcesId*/)
{
}

Back to pl.comp.os.linux.programowanie | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!? szykcech@gmail.com - 2018-11-17 07:54 -0800
  Re: Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!? szykcech@gmail.com - 2018-11-18 04:48 -0800
    Re: Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!? szykcech@gmail.com - 2018-11-18 07:12 -0800
      Re: Pulpity witrualne Kde Plazma i Qt: Jak się dowiedzieć na którym pulpicie pracuję?!? szykcech@gmail.com - 2018-11-18 07:18 -0800

csiph-web