Como configurar o papel de parede no Maemo 5
Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)
Dados do artigo
Artigo
Contents |
Introdução
Qt não oferece uma API para configurar os papeis de parede. Felizmente, não é difícil configura-lo no Maemo 5 Os papeis de parede são salvos como chaves do Gconf2 utilizando o gconftool-2.
Pré-requisitos
É preciso ter instalado o pacote screenshot-tool para que este exemplo funcione corretamente.
Caso você tenha problemas com o "include" do GConf confira este artigo:Using Gconf que em breve traduzirei-o.
Obtendo informações sobre as áreas de trabalho
$ gconftool-2 -R /apps/osso/hildon-desktop/views
current = 1
active = [1,2,3,4]
/apps/osso/hildon-desktop/views/1:
bg-image = /home/user/MyDocs/.images/wallpaper1.png
/apps/osso/hildon-desktop/views/2:
bg-image = /home/user/MyDocs/.images/wallpaper2.png
/apps/osso/hildon-desktop/views/3:
bg-image = /home/user/MyDocs/.images/wallpaper3.png
/apps/osso/hildon-desktop/views/4:
bg-image = /home/user/MyDocs/.images/wallpaper4.png
Baseado no resultado do código acima: Existem 4 áreas de trabalho ativas(active = [1,2,3,4]). A área de trabalho a atual é a primeira (current = 1).Você também pode identificar as respectivas imagens de cada área de trabalho.
Capturar a tela e configurar o papel de parede
Abaixo está um exemplo de aplicação que captura a tela e depois configura-o como papel de parede da área de trabalho atual.
#include <QCoreApplication>
#include <QProcess>
#include <QStringList>
#include <QDebug>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <gconf/gconf.h>
#include <gconf/gconf-client.h>
#define SHOT_NAME "screenshot.png"
int main (int argc, char **argv)
{
QCoreApplication app(argc, argv);
int currentDesktop = getXIntProperty("_NET_CURRENT_DESKTOP");
takeScreenshot(SHOT_NAME);
QString shotPath = QDir::currentPath() + "/" SHOT_NAME;
QByteArray shotPathUtf8 = shotPath.toUtf8();
setWallpaper(shotPathUtf8.data(), currentDesktop);
return 0;
}
Função para obter o número de aréa de trabalho ativas.
static int getXIntProperty (const char *propertyName)
{
Atom realType;
int format, status, num;
unsigned long n, extra;
unsigned char *data = 0;
char *display_name = getenv("DISPLAY");
Display *display = XOpenDisplay(display_name);
int screen = DefaultScreen(display);
Window rootWindow = RootWindow(display, screen);
Atom atom = XInternAtom(display, propertyName, false);
status = XGetWindowProperty(display, rootWindow, atom, 0L, 16L,
0, XA_CARDINAL, &realType, &format,
&n, &extra, &data);
if (status == Success && realType == XA_CARDINAL &&
format == 32 && n == 1 && data)
num = ((int*)data)[0];
else
num = -1;
if (data)
XFree(data);
XCloseDisplay(display);
return num;
}
Esta é a função que utiliza o screenshot-tool que é utilizado para capturar a tela.
static void takeScreenshot (const char *shotName)
{
QStringList args;
args << shotName;
if(QProcess::execute ("screenshot-tool", args))
qDebug("impossível capturar área de trabalho, instale o pacote screenshot-tool");
}
Função para configurar o papel de parede
static void setWallpaper (const char *uri, gint desktop)
{
GConfClient *client = gconf_client_get_default();
if (client) {
GError *error = 0;
char *path = g_strdup_printf("/apps/osso/hildon-desktop/views/%i/bg-image",
1 + desktop);
if (!gconf_client_set_string(client, path, uri, &error)) {
qDebug() << uri << error->message;
g_error_free(error);
}
g_free(path);
g_object_unref(client);
} else
qDebug("Impossível obter o cliente GConf2.");
}
Adicione estas linhas abaixo para gerar automaticamente o arquivo .pro:
unix {
CONFIG += link_pkgconfig
PKGCONFIG += gconf-2.0
}


(no comments yet)