mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
eiconman now uses settings code.
Removed dead utf8 parts. Misc stuff...
This commit is contained in:
parent
484717e7b8
commit
d8e4d986db
@ -25,8 +25,6 @@
|
|||||||
#include <edelib/MessageBox.h>
|
#include <edelib/MessageBox.h>
|
||||||
#include <edelib/Nls.h>
|
#include <edelib/Nls.h>
|
||||||
|
|
||||||
#define USE_SHAPE 1
|
|
||||||
|
|
||||||
#ifdef USE_SHAPE
|
#ifdef USE_SHAPE
|
||||||
#include <X11/extensions/shape.h>
|
#include <X11/extensions/shape.h>
|
||||||
#endif
|
#endif
|
||||||
@ -154,6 +152,7 @@ DesktopIcon::~DesktopIcon() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void DesktopIcon::update_label_size(void) {
|
void DesktopIcon::update_label_size(void) {
|
||||||
|
labelsize(globals->label_fontsize);
|
||||||
lwidth = globals->label_maxwidth;
|
lwidth = globals->label_maxwidth;
|
||||||
lheight= 0;
|
lheight= 0;
|
||||||
|
|
||||||
|
@ -10,7 +10,10 @@
|
|||||||
|
|
||||||
SubDir TOP eiconman ;
|
SubDir TOP eiconman ;
|
||||||
|
|
||||||
SOURCE = eiconman.cpp Utils.cpp Wallpaper.cpp DesktopIcon.cpp NotifyBox.cpp Utf8.cpp ;
|
ObjectC++Flags DesktopIcon.cpp : -DUSE_SHAPE ;
|
||||||
|
ObjectC++Flags eiconman.cpp : -DUSE_EDELIB_WINDOW ;
|
||||||
|
|
||||||
|
SOURCE = eiconman.cpp Utils.cpp Wallpaper.cpp DesktopIcon.cpp NotifyBox.cpp ;
|
||||||
|
|
||||||
EdeProgram eiconman : $(SOURCE) ;
|
EdeProgram eiconman : $(SOURCE) ;
|
||||||
TranslationStrings locale : $(SOURCE) ;
|
TranslationStrings locale : $(SOURCE) ;
|
||||||
|
@ -1,48 +0,0 @@
|
|||||||
#include "Utf8.h"
|
|
||||||
|
|
||||||
int utf16_to_utf8(unsigned int from, char* to) {
|
|
||||||
if(from < 0x000080) {
|
|
||||||
to[0] = from;
|
|
||||||
return 1;
|
|
||||||
} else if(from < 0x000800) {
|
|
||||||
to[0] = 0xC0 | (from >> 6);
|
|
||||||
to[1] = 0x80 | (from & 0x3F);
|
|
||||||
return 2;
|
|
||||||
} else if(from < 0x010000) {
|
|
||||||
to[0] = 0xE0 | (from >> 12);
|
|
||||||
to[1] = 0x80 | ((from >> 6) & 0x3F);
|
|
||||||
to[2] = 0x80 | (from & 0x3F);
|
|
||||||
return 3;
|
|
||||||
} else if(from < 0x00200000) {
|
|
||||||
to[0] = 0xF0 | (from >> 18);
|
|
||||||
to[1] = 0x80 | ((from >> 12) & 0x3F);
|
|
||||||
to[2] = 0x80 | ((from >> 6) & 0x3F);
|
|
||||||
to[3] = 0x80 | (from & 0x3F);
|
|
||||||
return 4;
|
|
||||||
} else if(from < 0x01000000) {
|
|
||||||
to[0] = 0xF8 | (from >> 24);
|
|
||||||
to[1] = 0x80 | ((from >> 18) & 0x3F);
|
|
||||||
to[2] = 0x80 | ((from >> 12) & 0x3F);
|
|
||||||
to[3] = 0x80 | ((from >> 6) & 0x3F);
|
|
||||||
to[4] = 0x80 | (from & 0x3F);
|
|
||||||
return 5;
|
|
||||||
}
|
|
||||||
to[0] = '?';
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int utf16_to_utf8_str(unsigned short* from, int len, char* to) {
|
|
||||||
int j = 0;
|
|
||||||
for(int i = 0; i < len; i++) {
|
|
||||||
int s = utf16_to_utf8((unsigned int)from[i], to + j);
|
|
||||||
if(s < 1)
|
|
||||||
j += 1;
|
|
||||||
else
|
|
||||||
j += s;
|
|
||||||
}
|
|
||||||
return j;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_utf16(unsigned short* from, int len) {
|
|
||||||
return !(from[0] < 0x000080);
|
|
||||||
}
|
|
@ -1,13 +0,0 @@
|
|||||||
#ifndef __UTF8_H__
|
|
||||||
#define __UTF8_H__
|
|
||||||
|
|
||||||
// 'to' must be at least 5 bytes long
|
|
||||||
int utf16_to_utf8(unsigned int from, char* to);
|
|
||||||
|
|
||||||
// 'to' must be at least len * 5 long
|
|
||||||
int utf16_to_utf8_str(unsigned short* from, int len, char* to);
|
|
||||||
|
|
||||||
// check if characters are in UTF-16 encoding
|
|
||||||
bool is_utf16(unsigned short* from, int len);
|
|
||||||
|
|
||||||
#endif
|
|
@ -19,7 +19,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Class responsible for displaying images at background
|
* Class responsible for displaying images at background
|
||||||
* their scaling (TODO), caching(TODO) and making coffee at spear time.
|
* their scaling (TODO), caching(TODO) and making coffee at the spear time.
|
||||||
*/
|
*/
|
||||||
class Wallpaper : public Fl_Box {
|
class Wallpaper : public Fl_Box {
|
||||||
private:
|
private:
|
||||||
|
@ -1,28 +1,15 @@
|
|||||||
[Desktop]
|
[Desktop]
|
||||||
Color = 45
|
Color = 458855680
|
||||||
WallpaperUse = 0
|
WallpaperUse = 1
|
||||||
Wallpaper = /home/foo/xxx/baz/tax
|
WallpaperMode = 1
|
||||||
|
Wallpaper = /home/sanel/wallpapers/janablack_02_1024.jpg
|
||||||
|
|
||||||
[Icons]
|
[Icons]
|
||||||
Label Background = 827223040
|
Label Background = 827223040
|
||||||
Label Foreground = 7
|
Label Foreground = 7
|
||||||
Label Fontsize = 10
|
Label Fontsize = 12
|
||||||
Label Maxwidth = 55
|
Label Maxwidth = 55
|
||||||
Label Transparent = 1
|
Label Transparent = 1
|
||||||
Label Visible = 1
|
Label Visible = 1
|
||||||
Gridspacing = 10
|
|
||||||
OneClickExec = 0
|
OneClickExec = 0
|
||||||
AutoArrange = 1
|
|
||||||
|
|
||||||
[Demo folder]
|
|
||||||
X = 20
|
|
||||||
Y = 151
|
|
||||||
|
|
||||||
[Home.desktop]
|
|
||||||
X = 113
|
|
||||||
Y = 16
|
|
||||||
|
|
||||||
[trash.desktop]
|
|
||||||
X = 20
|
|
||||||
Y = 20
|
|
||||||
|
|
||||||
|
@ -5,17 +5,20 @@
|
|||||||
* Part of Equinox Desktop Environment (EDE).
|
* Part of Equinox Desktop Environment (EDE).
|
||||||
* Copyright (c) 2000-2007 EDE Authors.
|
* Copyright (c) 2000-2007 EDE Authors.
|
||||||
*
|
*
|
||||||
* This program is licensed under terms of the
|
* This program is licensed under the terms of
|
||||||
* GNU General Public License version 2 or newer.
|
* the GNU General Public License version 2 or later.
|
||||||
* See COPYING for details.
|
* See COPYING for details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "eiconman.h"
|
#include "eiconman.h"
|
||||||
#include "DesktopIcon.h"
|
#include "DesktopIcon.h"
|
||||||
#include "Utils.h"
|
#include "Utils.h"
|
||||||
#include "Wallpaper.h"
|
#include "Wallpaper.h"
|
||||||
#include "NotifyBox.h"
|
#include "NotifyBox.h"
|
||||||
#include "Utf8.h"
|
|
||||||
|
|
||||||
#include <edelib/Debug.h>
|
#include <edelib/Debug.h>
|
||||||
#include <edelib/File.h>
|
#include <edelib/File.h>
|
||||||
@ -25,6 +28,7 @@
|
|||||||
#include <edelib/MimeType.h>
|
#include <edelib/MimeType.h>
|
||||||
#include <edelib/StrUtil.h>
|
#include <edelib/StrUtil.h>
|
||||||
#include <edelib/IconTheme.h>
|
#include <edelib/IconTheme.h>
|
||||||
|
#include <edelib/Run.h>
|
||||||
#include <edelib/Nls.h>
|
#include <edelib/Nls.h>
|
||||||
|
|
||||||
#include <FL/Fl.h>
|
#include <FL/Fl.h>
|
||||||
@ -36,22 +40,24 @@
|
|||||||
#include <FL/fl_ask.h>
|
#include <FL/fl_ask.h>
|
||||||
|
|
||||||
#include <unistd.h> // sleep
|
#include <unistd.h> // sleep
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdlib.h> // rand, srand
|
||||||
|
#include <time.h> // time
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#include <X11/extensions/Xdamage.h>
|
#include <X11/extensions/Xdamage.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <signal.h>
|
#define EICONMAN_UID 0x10
|
||||||
#include <stdlib.h> // rand, srand
|
#define CONFIG_NAME "eiconman.conf"
|
||||||
#include <time.h> // time
|
#define ICONS_CONFIG_NAME "eiconman-icons.conf"
|
||||||
|
|
||||||
#define CONFIG_NAME "eiconman.conf"
|
|
||||||
|
|
||||||
|
|
||||||
#define SELECTION_SINGLE (Fl::event_button() == 1)
|
#define SELECTION_SINGLE (Fl::event_button() == 1)
|
||||||
#define SELECTION_MULTI (Fl::event_button() == 1 && (Fl::event_key(FL_Shift_L) || Fl::event_key(FL_Shift_R)))
|
#define SELECTION_MULTI (Fl::event_button() == 1 && (Fl::event_key(FL_Shift_L) || Fl::event_key(FL_Shift_R)))
|
||||||
|
|
||||||
|
#undef MIN
|
||||||
#define MIN(x,y) ((x) < (y) ? (x) : (y))
|
#define MIN(x,y) ((x) < (y) ? (x) : (y))
|
||||||
|
#undef MAX
|
||||||
#define MAX(x,y) ((x) > (y) ? (x) : (y))
|
#define MAX(x,y) ((x) > (y) ? (x) : (y))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -60,6 +66,9 @@
|
|||||||
*/
|
*/
|
||||||
#define NOT_SELECTABLE(widget) ((widget == this) || (widget == wallpaper) || (widget == dmenu))
|
#define NOT_SELECTABLE(widget) ((widget == this) || (widget == wallpaper) || (widget == dmenu))
|
||||||
|
|
||||||
|
void background_conf_cb(Fl_Widget*, void*);
|
||||||
|
void icons_conf_cb(Fl_Widget*, void*);
|
||||||
|
|
||||||
Fl_Menu_Item desktop_menu[] = {
|
Fl_Menu_Item desktop_menu[] = {
|
||||||
{_(" &New desktop item "), 0, 0, 0, FL_SUBMENU},
|
{_(" &New desktop item "), 0, 0, 0, FL_SUBMENU},
|
||||||
{_(" &Application... "), 0, 0},
|
{_(" &Application... "), 0, 0},
|
||||||
@ -74,8 +83,8 @@ Fl_Menu_Item desktop_menu[] = {
|
|||||||
{0},
|
{0},
|
||||||
{_(" &Copy "), 0, 0},
|
{_(" &Copy "), 0, 0},
|
||||||
{_(" &Paste "), 0, 0, 0, FL_MENU_DIVIDER},
|
{_(" &Paste "), 0, 0, 0, FL_MENU_DIVIDER},
|
||||||
{_(" &Icons settings... "), 0, 0},
|
{_(" &Icons settings... "), 0, icons_conf_cb, 0},
|
||||||
{_(" &Background... "), 0, 0},
|
{_(" &Background... "), 0, background_conf_cb, 0},
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -118,6 +127,19 @@ void dir_watch_cb(const char* dir, const char* changed, int flags, void* data) {
|
|||||||
Desktop::instance()->dir_watch(dir, changed, flags);
|
Desktop::instance()->dir_watch(dir, changed, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void settings_changed_cb(void* data) {
|
||||||
|
Desktop::instance()->read_config();
|
||||||
|
Desktop::instance()->redraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
void background_conf_cb(Fl_Widget*, void*) {
|
||||||
|
Desktop::instance()->execute("../edesktopconf/edesktopconf");
|
||||||
|
}
|
||||||
|
|
||||||
|
void icons_conf_cb(Fl_Widget*, void*) {
|
||||||
|
Desktop::instance()->execute("../edesktopconf/edesktopconf --icons");
|
||||||
|
}
|
||||||
|
|
||||||
int desktop_xmessage_handler(int event) {
|
int desktop_xmessage_handler(int event) {
|
||||||
#if 0
|
#if 0
|
||||||
if(fl_xevent->type == xevent_base + XDamageNotify) {
|
if(fl_xevent->type == xevent_base + XDamageNotify) {
|
||||||
@ -167,6 +189,12 @@ Desktop::Desktop() : DESKTOP_WINDOW(0, 0, 100, 100, "") {
|
|||||||
moving = false;
|
moving = false;
|
||||||
do_dirwatch = true;
|
do_dirwatch = true;
|
||||||
|
|
||||||
|
#ifdef USE_EDELIB_WINDOW
|
||||||
|
DESKTOP_WINDOW::init();
|
||||||
|
settings_uid(EICONMAN_UID);
|
||||||
|
settings_callback(settings_changed_cb);
|
||||||
|
#endif
|
||||||
|
|
||||||
selbox = new SelectionOverlay;
|
selbox = new SelectionOverlay;
|
||||||
selbox->x = selbox->y = selbox->w = selbox->h = 0;
|
selbox->x = selbox->y = selbox->w = selbox->h = 0;
|
||||||
selbox->show = false;
|
selbox->show = false;
|
||||||
@ -179,6 +207,8 @@ Desktop::Desktop() : DESKTOP_WINDOW(0, 0, 100, 100, "") {
|
|||||||
Desktop::~Desktop() {
|
Desktop::~Desktop() {
|
||||||
EDEBUG("Desktop::~Desktop()\n");
|
EDEBUG("Desktop::~Desktop()\n");
|
||||||
|
|
||||||
|
save_icons();
|
||||||
|
|
||||||
delete dsett;
|
delete dsett;
|
||||||
delete selbox;
|
delete selbox;
|
||||||
delete notify;
|
delete notify;
|
||||||
@ -200,15 +230,6 @@ void Desktop::init_internals(void) {
|
|||||||
dmenu->menu(desktop_menu);
|
dmenu->menu(desktop_menu);
|
||||||
|
|
||||||
wallpaper = new Wallpaper(0, 0, w(), h());
|
wallpaper = new Wallpaper(0, 0, w(), h());
|
||||||
wallpaper->set("/home/sanel/wallpapers/katebig.jpg");
|
|
||||||
//wallpaper->set_tiled("/home/sanel/wallpapers/katesmall.jpg");
|
|
||||||
//wallpaper->set_tiled("/home/sanelz/walls/katesmall.jpg");
|
|
||||||
//wallpaper->set_tiled("/home/sanelz/walls/kate.jpg");
|
|
||||||
//wallpaper->set("/home/sanelz/walls/katebig.jpg");
|
|
||||||
//wallpaper->hide();
|
|
||||||
//wallpaper->set("/home/sanelz/walls/katesmall.jpg");
|
|
||||||
//wallpaper->set("/home/sanelz/walls/nin/1024x768-04.jpg");
|
|
||||||
//wallpaper->set("/home/sanelz/walls/nin/1024x768-02.jpg");
|
|
||||||
end();
|
end();
|
||||||
|
|
||||||
notify = new NotifyBox(w(), h());
|
notify = new NotifyBox(w(), h());
|
||||||
@ -216,12 +237,29 @@ void Desktop::init_internals(void) {
|
|||||||
|
|
||||||
read_config();
|
read_config();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Now try to load icons, first looking inside ~/Desktop directory
|
||||||
|
* FIXME: dir_exists() can't handle '~/desktop' ???
|
||||||
|
*/
|
||||||
|
edelib::String dd = edelib::dir_home();
|
||||||
|
if(dd.empty()) {
|
||||||
|
EWARNING(ESTRLOC ": can't read home directory; icons will not be loaded\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
dd += "/Desktop";
|
||||||
|
|
||||||
|
if(edelib::dir_exists(dd.c_str())) {
|
||||||
|
load_icons(dd.c_str());
|
||||||
|
install_watch(dd.c_str());
|
||||||
|
}
|
||||||
|
|
||||||
running = true;
|
running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Desktop::init(void) {
|
void Desktop::init(void) {
|
||||||
if(Desktop::pinstance != NULL)
|
if(Desktop::pinstance != NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Desktop::pinstance = new Desktop();
|
Desktop::pinstance = new Desktop();
|
||||||
Desktop::pinstance->init_internals();
|
Desktop::pinstance->init_internals();
|
||||||
}
|
}
|
||||||
@ -303,7 +341,6 @@ void Desktop::read_config(void) {
|
|||||||
int default_wp_use = false;
|
int default_wp_use = false;
|
||||||
char wpath[256];
|
char wpath[256];
|
||||||
|
|
||||||
// read Desktop section
|
|
||||||
conf.get("Desktop", "Color", dsett->color, default_bg_color);
|
conf.get("Desktop", "Color", dsett->color, default_bg_color);
|
||||||
|
|
||||||
if(conf.error() != edelib::CONF_ERR_SECTION) {
|
if(conf.error() != edelib::CONF_ERR_SECTION) {
|
||||||
@ -320,7 +357,6 @@ void Desktop::read_config(void) {
|
|||||||
dsett->wp_use = default_wp_use;
|
dsett->wp_use = default_wp_use;
|
||||||
}
|
}
|
||||||
|
|
||||||
// read Icons section
|
|
||||||
conf.get("Icons", "Label Background", gisett.label_background, FL_BLUE);
|
conf.get("Icons", "Label Background", gisett.label_background, FL_BLUE);
|
||||||
conf.get("Icons", "Label Foreground", gisett.label_foreground, FL_WHITE);
|
conf.get("Icons", "Label Foreground", gisett.label_foreground, FL_WHITE);
|
||||||
conf.get("Icons", "Label Fontsize", gisett.label_fontsize, 12);
|
conf.get("Icons", "Label Fontsize", gisett.label_fontsize, 12);
|
||||||
@ -330,56 +366,42 @@ void Desktop::read_config(void) {
|
|||||||
conf.get("Icons", "OneClickExec", gisett.one_click_exec, false);
|
conf.get("Icons", "OneClickExec", gisett.one_click_exec, false);
|
||||||
conf.get("Icons", "AutoArrange", gisett.auto_arrange, true);
|
conf.get("Icons", "AutoArrange", gisett.auto_arrange, true);
|
||||||
|
|
||||||
/*
|
if(dsett->wp_use)
|
||||||
* Now try to load icons, first looking inside ~/Desktop directory
|
wallpaper->set(wpath);
|
||||||
* then inside config since config could contain removed entries
|
}
|
||||||
* from $HOME/Desktop
|
|
||||||
*
|
|
||||||
* FIXME: dir_exists() can't handle '~/Desktop' ???
|
|
||||||
*/
|
|
||||||
edelib::String dd = edelib::dir_home();
|
|
||||||
if(dd.empty()) {
|
|
||||||
EWARNING(ESTRLOC ": Can't read home directory; icons will not be loaded\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dd += "/Desktop";
|
|
||||||
|
|
||||||
/*
|
void Desktop::install_watch(const char* path) {
|
||||||
* Setup watcher on ~/Desktop directory. All further events will
|
edelib::DirWatch::init();
|
||||||
* be reported to dir_watch()
|
edelib::DirWatch::callback(dir_watch_cb);
|
||||||
*/
|
|
||||||
if(edelib::dir_exists(dd.c_str())) {
|
|
||||||
load_icons(dd.c_str(), &conf);
|
|
||||||
|
|
||||||
edelib::DirWatch::init();
|
if(!edelib::DirWatch::add(path,
|
||||||
edelib::DirWatch::callback(dir_watch_cb);
|
|
||||||
|
|
||||||
if(!edelib::DirWatch::add(dd.c_str(),
|
|
||||||
edelib::DW_CREATE | edelib::DW_MODIFY | edelib::DW_RENAME | edelib::DW_DELETE)) {
|
edelib::DW_CREATE | edelib::DW_MODIFY | edelib::DW_RENAME | edelib::DW_DELETE)) {
|
||||||
|
|
||||||
EWARNING(ESTRLOC ": Can't load %s; icons will not be loaded\n", dd.c_str());
|
EWARNING(ESTRLOC ": Can't setup watch on %s\n", path);
|
||||||
edelib::DirWatch::shutdown();
|
edelib::DirWatch::shutdown();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Desktop::save_config(void) {
|
void Desktop::load_icons(const char* path) {
|
||||||
// TODO
|
|
||||||
}
|
|
||||||
|
|
||||||
void Desktop::load_icons(const char* path, edelib::Config* conf) {
|
|
||||||
EASSERT(path != NULL);
|
EASSERT(path != NULL);
|
||||||
|
edelib::Config conf, *conf_ptr = NULL;
|
||||||
|
|
||||||
|
if(!conf.load(ICONS_CONFIG_NAME))
|
||||||
|
EWARNING(ESTRLOC ": Can't load icons positions from %s, randomizing them...\n", ICONS_CONFIG_NAME);
|
||||||
|
else
|
||||||
|
conf_ptr = &conf;
|
||||||
|
|
||||||
|
StringList lst;
|
||||||
|
|
||||||
edelib::list<edelib::String> lst;
|
|
||||||
// list with full path; icon basename is extracted in add_icon_pathed()
|
// list with full path; icon basename is extracted in add_icon_pathed()
|
||||||
if(!dir_list(path, lst, true)) {
|
if(!dir_list(path, lst, true)) {
|
||||||
EDEBUG(ESTRLOC ": Can't read %s\n", path);
|
EDEBUG(ESTRLOC ": Can't read %s\n", path);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
edelib::list<edelib::String>::iterator it, it_end;
|
StringListIter it, it_end;
|
||||||
for(it = lst.begin(), it_end = lst.end(); it != it_end; ++it)
|
for(it = lst.begin(), it_end = lst.end(); it != it_end; ++it)
|
||||||
add_icon_pathed((*it).c_str(), conf);
|
add_icon_pathed((*it).c_str(), conf_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Desktop::add_icon_pathed(const char* path, edelib::Config* conf) {
|
bool Desktop::add_icon_pathed(const char* path, edelib::Config* conf) {
|
||||||
@ -445,6 +467,24 @@ bool Desktop::add_icon_pathed(const char* path, edelib::Config* conf) {
|
|||||||
return can_add;
|
return can_add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Desktop::save_icons(void) {
|
||||||
|
edelib::Config conf;
|
||||||
|
char* icon_base;
|
||||||
|
DesktopIconListIter it = icons.begin(), it_end = icons.end();
|
||||||
|
|
||||||
|
for(; it != it_end; ++it) {
|
||||||
|
if((*it)->path().empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
icon_base = get_basename((*it)->path().c_str());
|
||||||
|
conf.set(icon_base, "X", (*it)->x());
|
||||||
|
conf.set(icon_base, "Y", (*it)->y());
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!conf.save(ICONS_CONFIG_NAME))
|
||||||
|
EWARNING(ESTRLOC ": Unable to store icons positions\n");
|
||||||
|
}
|
||||||
|
|
||||||
DesktopIcon* Desktop::find_icon_pathed(const char* path) {
|
DesktopIcon* Desktop::find_icon_pathed(const char* path) {
|
||||||
EASSERT(path != NULL);
|
EASSERT(path != NULL);
|
||||||
|
|
||||||
@ -742,6 +782,9 @@ void Desktop::notify_desktop_changed(void) {
|
|||||||
|
|
||||||
char** names;
|
char** names;
|
||||||
int ret = net_get_workspace_names(names);
|
int ret = net_get_workspace_names(names);
|
||||||
|
if(!ret)
|
||||||
|
return;
|
||||||
|
|
||||||
if(num >= ret) {
|
if(num >= ret) {
|
||||||
XFreeStringList(names);
|
XFreeStringList(names);
|
||||||
return;
|
return;
|
||||||
@ -758,21 +801,6 @@ void Desktop::drop_source(const char* src, int src_len, int x, int y) {
|
|||||||
if(src_len < 1)
|
if(src_len < 1)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Commented for now since is_utf16() does not works as expected;
|
|
||||||
* on other hand, UTF-16 conversion is fine
|
|
||||||
*/
|
|
||||||
if(is_utf16((unsigned short*)src, src_len)) {
|
|
||||||
char* utf_src = new char[src_len * 5];
|
|
||||||
if(utf16_to_utf8_str((unsigned short*)src, src_len, utf_src)) {
|
|
||||||
utf_src[src_len] = '\0';
|
|
||||||
EDEBUG(ESTRLOC ":==========> %s|\n", utf_src);
|
|
||||||
}
|
|
||||||
|
|
||||||
delete [] utf_src;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
char* src_copy = new char[src_len + 1];
|
char* src_copy = new char[src_len + 1];
|
||||||
int real_len = 0;
|
int real_len = 0;
|
||||||
|
|
||||||
@ -957,6 +985,11 @@ void Desktop::dir_watch(const char* dir, const char* changed, int flags) {
|
|||||||
EDEBUG(ESTRLOC ": %s changed with %i\n", changed, flags);
|
EDEBUG(ESTRLOC ": %s changed with %i\n", changed, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Desktop::execute(const char* cmd) {
|
||||||
|
EASSERT(cmd != NULL);
|
||||||
|
edelib::run_program(cmd, false);
|
||||||
|
}
|
||||||
|
|
||||||
int Desktop::handle(int event) {
|
int Desktop::handle(int event) {
|
||||||
switch(event) {
|
switch(event) {
|
||||||
case FL_FOCUS:
|
case FL_FOCUS:
|
||||||
@ -988,7 +1021,8 @@ int Desktop::handle(int event) {
|
|||||||
selbox->x = Fl::event_x();
|
selbox->x = Fl::event_x();
|
||||||
selbox->y = Fl::event_y();
|
selbox->y = Fl::event_y();
|
||||||
} else if(Fl::event_button() == 3) {
|
} else if(Fl::event_button() == 3) {
|
||||||
dmenu->menu()->popup(Fl::event_x(), Fl::event_y());
|
const Fl_Menu_Item* item = dmenu->menu()->popup(Fl::event_x(), Fl::event_y());
|
||||||
|
dmenu->picked(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -1152,9 +1186,10 @@ int main() {
|
|||||||
// a lot of preparing code depends on this
|
// a lot of preparing code depends on this
|
||||||
fl_open_display();
|
fl_open_display();
|
||||||
|
|
||||||
|
#ifndef USE_EDELIB_WINDOW
|
||||||
fl_register_images();
|
fl_register_images();
|
||||||
|
|
||||||
edelib::IconTheme::init("edeneu");
|
edelib::IconTheme::init("edeneu");
|
||||||
|
#endif
|
||||||
|
|
||||||
Desktop::init();
|
Desktop::init();
|
||||||
Desktop::instance()->show();
|
Desktop::instance()->show();
|
||||||
@ -1172,7 +1207,8 @@ int main() {
|
|||||||
|
|
||||||
Desktop::shutdown();
|
Desktop::shutdown();
|
||||||
|
|
||||||
|
#ifndef USE_EDELIB_WINDOW
|
||||||
edelib::IconTheme::shutdown();
|
edelib::IconTheme::shutdown();
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,13 @@
|
|||||||
#ifndef __EICONMAN_H__
|
#ifndef __EICONMAN_H__
|
||||||
#define __EICONMAN_H__
|
#define __EICONMAN_H__
|
||||||
|
|
||||||
#include <FL/Fl_Window.h>
|
#ifdef USE_EDELIB_WINDOW
|
||||||
#include <FL/Fl_Double_Window.h>
|
#include <edelib/Window.h>
|
||||||
|
#else
|
||||||
|
#include <FL/Fl_Window.h>
|
||||||
|
#include <FL/Fl_Double_Window.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <FL/Fl_Image.h>
|
#include <FL/Fl_Image.h>
|
||||||
|
|
||||||
#include <edelib/String.h>
|
#include <edelib/String.h>
|
||||||
@ -80,8 +85,14 @@ class Fl_Menu_Button;
|
|||||||
|
|
||||||
typedef edelib::list<DesktopIcon*> DesktopIconList;
|
typedef edelib::list<DesktopIcon*> DesktopIconList;
|
||||||
typedef edelib::list<DesktopIcon*>::iterator DesktopIconListIter;
|
typedef edelib::list<DesktopIcon*>::iterator DesktopIconListIter;
|
||||||
|
typedef edelib::list<edelib::String> StringList;
|
||||||
|
typedef edelib::list<edelib::String>::iterator StringListIter;
|
||||||
|
|
||||||
#define DESKTOP_WINDOW Fl_Window
|
#ifdef USE_EDELIB_WINDOW
|
||||||
|
#define DESKTOP_WINDOW edelib::Window
|
||||||
|
#else
|
||||||
|
#define DESKTOP_WINDOW Fl_Window
|
||||||
|
#endif
|
||||||
|
|
||||||
class Desktop : public DESKTOP_WINDOW {
|
class Desktop : public DESKTOP_WINDOW {
|
||||||
private:
|
private:
|
||||||
@ -105,7 +116,9 @@ class Desktop : public DESKTOP_WINDOW {
|
|||||||
|
|
||||||
void init_internals(void);
|
void init_internals(void);
|
||||||
|
|
||||||
void load_icons(const char* path, edelib::Config* conf);
|
void load_icons(const char* path);
|
||||||
|
void save_icons(void);
|
||||||
|
void install_watch(const char* path);
|
||||||
bool read_desktop_file(const char* path, IconSettings& is);
|
bool read_desktop_file(const char* path, IconSettings& is);
|
||||||
|
|
||||||
void add_icon(DesktopIcon* ic);
|
void add_icon(DesktopIcon* ic);
|
||||||
@ -141,7 +154,6 @@ class Desktop : public DESKTOP_WINDOW {
|
|||||||
static Desktop* instance(void);
|
static Desktop* instance(void);
|
||||||
|
|
||||||
void read_config(void);
|
void read_config(void);
|
||||||
void save_config(void);
|
|
||||||
|
|
||||||
void update_workarea(void);
|
void update_workarea(void);
|
||||||
void area(int& X, int& Y, int& W, int& H) { X = x(); Y = y(); W = w(); H = h(); }
|
void area(int& X, int& Y, int& W, int& H) { X = x(); Y = y(); W = w(); H = h(); }
|
||||||
@ -155,6 +167,8 @@ class Desktop : public DESKTOP_WINDOW {
|
|||||||
void dir_watch(const char* dir, const char* changed, int flags);
|
void dir_watch(const char* dir, const char* changed, int flags);
|
||||||
void dir_watch_on(void) { do_dirwatch = true; }
|
void dir_watch_on(void) { do_dirwatch = true; }
|
||||||
void dir_watch_off(void) { do_dirwatch = false; }
|
void dir_watch_off(void) { do_dirwatch = false; }
|
||||||
|
|
||||||
|
void execute(const char* cmd);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user