mirror of
https://github.com/edeproject/ede.git
synced 2023-08-10 21:13:03 +03:00
Refactoring some icon handling. Dumping trash handling; this should be done by separate application
This commit is contained in:
parent
f3ff9ade2d
commit
77c2ce9739
@ -27,12 +27,9 @@
|
||||
#include <edelib/Nls.h>
|
||||
#include <edelib/Run.h>
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
# include <X11/extensions/shape.h>
|
||||
#endif
|
||||
|
||||
#include "ede-desktop.h"
|
||||
#include "DesktopIcon.h"
|
||||
#include "MovableIcon.h"
|
||||
#include "IconProperties.h"
|
||||
#include "Utils.h"
|
||||
|
||||
@ -91,7 +88,6 @@ static void rename_cb(Fl_Widget*, void* d) {
|
||||
|
||||
static void props_cb(Fl_Widget*, void* d) {
|
||||
DesktopIcon* di = (DesktopIcon*)d;
|
||||
|
||||
show_icon_properties_dialog(di);
|
||||
}
|
||||
|
||||
@ -431,56 +427,3 @@ int DesktopIcon::handle(int event) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
MovableIcon::MovableIcon(DesktopIcon* ic) : Fl_Window(ic->x(), ic->y(), ic->w(), ic->h()), icon(ic), mask(0) {
|
||||
E_ASSERT(icon != NULL);
|
||||
|
||||
set_override();
|
||||
color(ic->color());
|
||||
|
||||
begin();
|
||||
/*
|
||||
* Force box be same width/height as icon so it
|
||||
* can fit inside masked window.
|
||||
*/
|
||||
#ifdef HAVE_SHAPE
|
||||
Fl_Image* img = ic->icon_image();
|
||||
if(img)
|
||||
icon_box = new Fl_Box(0, 0, img->w(), img->h());
|
||||
else
|
||||
icon_box = new Fl_Box(0, 0, w(), h());
|
||||
#else
|
||||
icon_box = new Fl_Box(0, 0, w(), h());
|
||||
#endif
|
||||
icon_box->image(ic->icon_image());
|
||||
end();
|
||||
}
|
||||
|
||||
MovableIcon::~MovableIcon() {
|
||||
if(mask)
|
||||
XFreePixmap(fl_display, mask);
|
||||
}
|
||||
|
||||
void MovableIcon::show(void) {
|
||||
if(!shown())
|
||||
Fl_X::make_xid(this);
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
if(icon->icon_image()) {
|
||||
mask = create_mask(icon->icon_image());
|
||||
if(mask) {
|
||||
XShapeCombineMask(fl_display, fl_xid(this), ShapeBounding, 0, 0, mask, ShapeSet);
|
||||
|
||||
/*
|
||||
* now set transparency; composite manager should handle the rest (if running)
|
||||
* TODO: should this be declared as part of the class ?
|
||||
*/
|
||||
Atom opacity_atom = XInternAtom(fl_display, "_NET_WM_WINDOW_OPACITY", False);
|
||||
unsigned int opacity = 0xc0000000;
|
||||
|
||||
XChangeProperty(fl_display, fl_xid(this), opacity_atom, XA_CARDINAL, 32, PropModeReplace,
|
||||
(unsigned char*)&opacity, 1L);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -13,8 +13,6 @@
|
||||
#ifndef __DESKTOPICON_H__
|
||||
#define __DESKTOPICON_H__
|
||||
|
||||
#include <X11/Xlib.h> // Pixmap
|
||||
|
||||
#include <FL/Fl_Widget.H>
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Box.H>
|
||||
@ -94,16 +92,4 @@ public:
|
||||
void use_icon2(void);
|
||||
};
|
||||
|
||||
class MovableIcon : public Fl_Window {
|
||||
private:
|
||||
DesktopIcon* icon;
|
||||
Fl_Box* icon_box;
|
||||
Pixmap mask;
|
||||
|
||||
public:
|
||||
MovableIcon(DesktopIcon* i);
|
||||
~MovableIcon();
|
||||
virtual void show(void);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -12,7 +12,12 @@ SubDir TOP ede-desktop ;
|
||||
|
||||
ObjectC++Flags ede-desktop.cpp : -DUSE_EDELIB_WINDOW ;
|
||||
|
||||
SOURCE = ede-desktop.cpp Utils.cpp Wallpaper.cpp DesktopIcon.cpp IconProperties.cpp ;
|
||||
SOURCE = ede-desktop.cpp
|
||||
Utils.cpp
|
||||
Wallpaper.cpp
|
||||
DesktopIcon.cpp
|
||||
MovableIcon.cpp
|
||||
IconProperties.cpp ;
|
||||
|
||||
ObjectC++Flags $(SOURCE) : $(EDELIB_DBUS_INCLUDE) ;
|
||||
|
||||
|
75
ede-desktop/MovableIcon.cpp
Normal file
75
ede-desktop/MovableIcon.cpp
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* $Id: DesktopIcon.cpp 3032 2011-08-03 12:20:37Z karijes $
|
||||
*
|
||||
* ede-desktop, desktop and icon manager
|
||||
* Part of Equinox Desktop Environment (EDE).
|
||||
* Copyright (c) 2006-2011 EDE Authors.
|
||||
*
|
||||
* This program is licensed under terms of the
|
||||
* GNU General Public License version 2 or newer.
|
||||
* See COPYING for details.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#define FL_LIBRARY 1
|
||||
#include <FL/Fl.H>
|
||||
#include <FL/x.H>
|
||||
#include <edelib/Debug.h>
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
# include <X11/extensions/shape.h>
|
||||
#endif
|
||||
|
||||
#include "MovableIcon.h"
|
||||
#include "DesktopIcon.h"
|
||||
#include "Utils.h"
|
||||
|
||||
MovableIcon::MovableIcon(DesktopIcon* ic) : Fl_Window(ic->x(), ic->y(), ic->w(), ic->h()), icon(ic), mask(0), opacity_atom(0) {
|
||||
E_ASSERT(icon != NULL);
|
||||
|
||||
set_override();
|
||||
color(ic->color());
|
||||
|
||||
begin();
|
||||
/* force box be same width/height as icon so it can fit inside masked window */
|
||||
#ifdef HAVE_SHAPE
|
||||
Fl_Image* img = ic->icon_image();
|
||||
if(img)
|
||||
icon_box = new Fl_Box(0, 0, img->w(), img->h());
|
||||
else
|
||||
icon_box = new Fl_Box(0, 0, w(), h());
|
||||
#else
|
||||
icon_box = new Fl_Box(0, 0, w(), h());
|
||||
#endif
|
||||
icon_box->image(ic->icon_image());
|
||||
end();
|
||||
|
||||
opacity_atom = XInternAtom(fl_display, "_NET_WM_WINDOW_OPACITY", False);
|
||||
}
|
||||
|
||||
MovableIcon::~MovableIcon() {
|
||||
if(mask)
|
||||
XFreePixmap(fl_display, mask);
|
||||
}
|
||||
|
||||
void MovableIcon::show(void) {
|
||||
if(!shown())
|
||||
Fl_X::make_xid(this);
|
||||
|
||||
#ifdef HAVE_SHAPE
|
||||
if(icon->icon_image()) {
|
||||
mask = create_mask(icon->icon_image());
|
||||
if(mask) {
|
||||
XShapeCombineMask(fl_display, fl_xid(this), ShapeBounding, 0, 0, mask, ShapeSet);
|
||||
|
||||
/* now set transparency; composite manager should handle the rest (if running) */
|
||||
unsigned int opacity = 0xc0000000;
|
||||
XChangeProperty(fl_display, fl_xid(this), opacity_atom, XA_CARDINAL, 32, PropModeReplace,
|
||||
(unsigned char*)&opacity, 1L);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
34
ede-desktop/MovableIcon.h
Normal file
34
ede-desktop/MovableIcon.h
Normal file
@ -0,0 +1,34 @@
|
||||
/*
|
||||
* $Id: DesktopIcon.h 2742 2009-07-09 13:59:51Z karijes $
|
||||
*
|
||||
* ede-desktop, desktop and icon manager
|
||||
* Part of Equinox Desktop Environment (EDE).
|
||||
* Copyright (c) 2006-2011 EDE Authors.
|
||||
*
|
||||
* This program is licensed under terms of the
|
||||
* GNU General Public License version 2 or newer.
|
||||
* See COPYING for details.
|
||||
*/
|
||||
|
||||
#ifndef __MOVABLEICON_H__
|
||||
#define __MOVABLEICON_H__
|
||||
|
||||
#include <X11/Xlib.h> // Pixmap
|
||||
#include <FL/Fl_Window.H>
|
||||
#include <FL/Fl_Box.H>
|
||||
|
||||
class DesktopIcon;
|
||||
|
||||
class MovableIcon : public Fl_Window {
|
||||
private:
|
||||
DesktopIcon* icon;
|
||||
Fl_Box* icon_box;
|
||||
Pixmap mask;
|
||||
Atom opacity_atom;
|
||||
public:
|
||||
MovableIcon(DesktopIcon* i);
|
||||
~MovableIcon();
|
||||
virtual void show(void);
|
||||
};
|
||||
|
||||
#endif
|
@ -233,21 +233,6 @@ void Desktop::init_internals(void) {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* For watching Trash, we will check Trash/files only with create/delete flags and
|
||||
* in callback will be checked if directory is empty (trash empty) or not (trash full).
|
||||
*/
|
||||
p = edelib::user_data_dir();
|
||||
trash_path = edelib::build_filename(p.c_str(), "Trash/files");
|
||||
|
||||
if(edelib::file_test(trash_path.c_str(), edelib::FILE_TEST_IS_DIR)) {
|
||||
if(!edelib::DirWatch::add(trash_path.c_str(), edelib::DW_CREATE | edelib::DW_DELETE))
|
||||
E_WARNING(E_STRLOC ": Unable to watch %s\n", trash_path.c_str());
|
||||
}
|
||||
|
||||
/* draw appropriate trash icon */
|
||||
update_trash_icons();
|
||||
|
||||
edelib::DirWatch::callback(dir_watch_cb);
|
||||
running = true;
|
||||
}
|
||||
@ -576,20 +561,6 @@ void Desktop::auto_arrange(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void Desktop::update_trash_icons(void) {
|
||||
bool is_empty = edelib::dir_empty(trash_path.c_str());
|
||||
DesktopIconListIter it = icons.begin(), it_end = icons.end();
|
||||
|
||||
for(; it != it_end; ++it) {
|
||||
if((*it)->icon_type() == ICON_TRASH) {
|
||||
if(is_empty)
|
||||
(*it)->use_icon1();
|
||||
else
|
||||
(*it)->use_icon2();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Desktop::add_icon(DesktopIcon* ic) {
|
||||
E_ASSERT(ic != NULL);
|
||||
|
||||
@ -936,12 +907,6 @@ void Desktop::dir_watch(const char* dir, const char* changed, int flags) {
|
||||
if(is_temp_filename(changed))
|
||||
return;
|
||||
|
||||
if(trash_path == dir) {
|
||||
update_trash_icons();
|
||||
E_DEBUG(E_STRLOC ": event on trash dir %s\n", dir);
|
||||
return;
|
||||
}
|
||||
|
||||
if(flags == edelib::DW_REPORT_CREATE) {
|
||||
E_DEBUG(E_STRLOC ": adding %s\n", changed);
|
||||
|
||||
@ -1003,10 +968,7 @@ int Desktop::handle(int event) {
|
||||
// from here, all events are managed for icons
|
||||
DesktopIcon* tmp_icon = (DesktopIcon*)clicked;
|
||||
|
||||
/*
|
||||
* do no use assertion on this, since
|
||||
* fltk::belowmouse() can miss our icon
|
||||
*/
|
||||
/* do no use assertion on this, since fltk::belowmouse() can miss our icon */
|
||||
if(!tmp_icon)
|
||||
return 1;
|
||||
|
||||
|
@ -15,9 +15,11 @@
|
||||
|
||||
#ifdef USE_EDELIB_WINDOW
|
||||
# include <edelib/Window.h>
|
||||
# define DESKTOP_WINDOW edelib::Window
|
||||
#else
|
||||
# include <FL/Fl_Window.H>
|
||||
# include <FL/Fl_Double_Window.H>
|
||||
# define DESKTOP_WINDOW Fl_Window
|
||||
#endif
|
||||
|
||||
#include <FL/Fl_Image.H>
|
||||
@ -86,12 +88,6 @@ typedef edelib::list<DesktopIcon*>::iterator DesktopIconListIter;
|
||||
typedef edelib::list<edelib::String> StringList;
|
||||
typedef edelib::list<edelib::String>::iterator StringListIter;
|
||||
|
||||
#ifdef USE_EDELIB_WINDOW
|
||||
#define DESKTOP_WINDOW edelib::Window
|
||||
#else
|
||||
#define DESKTOP_WINDOW Fl_Window
|
||||
#endif
|
||||
|
||||
class Desktop : public DESKTOP_WINDOW {
|
||||
private:
|
||||
static Desktop* pinstance;
|
||||
@ -111,8 +107,6 @@ private:
|
||||
DesktopIconList icons;
|
||||
DesktopIconList selectionbuf;
|
||||
|
||||
edelib::String trash_path;
|
||||
|
||||
void init_internals(void);
|
||||
|
||||
void load_icons(const char* path);
|
||||
@ -127,8 +121,6 @@ private:
|
||||
|
||||
void auto_arrange(void);
|
||||
|
||||
void update_trash_icons(void);
|
||||
|
||||
void unfocus_all(void);
|
||||
|
||||
void select(DesktopIcon* ic, bool do_redraw = true);
|
||||
|
Loading…
Reference in New Issue
Block a user