×
Namespaces

Variants
Actions

Como configurar o papel de parede no Maemo 5

From Nokia Developer Wiki
Jump to: navigation, search

Archived.pngAquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.

Acredita-se que este artigo ainda seja válido no contexto original (quando ele foi escrito)


Article Metadata

Artigo
Tradução:
Por edprado
Última alteração feita por lpvalente em 06 Dec 2012

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
}
This page was last modified on 6 December 2012, at 22:05.
38 page views in the last 30 days.