~cairo-dock-team/cairo-dock-core/popup_from_shortkey

« back to all changes in this revision

Viewing changes to src/gldit/cairo-dock-icon-manager.c

  • Committer: Fabrice Rey
  • Date: 2013-06-04 22:58:28 UTC
  • Revision ID: fabounet03@gmail.com-20130604225828-x8lg3mv9135jr114
updated various parts of the core to the new API (new icons type, 'delete' method, simplified functions, etc)

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
#include "cairo-dock-draw.h"  // cairo_dock_render_icon_notification
34
34
#include "cairo-dock-draw-opengl.h"  // cairo_dock_destroy_icon_fbo
35
35
#include "cairo-dock-container.h"
36
 
#include "cairo-dock-dock-manager.h"  // cairo_dock_foreach_icons_in_docks
 
36
#include "cairo-dock-dock-manager.h"  // gldi_icons_foreach_in_docks
37
37
#include "cairo-dock-dialog-manager.h"  // cairo_dock_remove_dialog_if_any
38
38
#include "cairo-dock-data-renderer.h"  // cairo_dock_remove_data_renderer_on_icon
39
39
#include "cairo-dock-file-manager.h"  // cairo_dock_fm_remove_monitor_full
40
40
#include "cairo-dock-animations.h"  // cairo_dock_animation_will_be_visible
41
41
#include "cairo-dock-dock-facility.h"  // cairo_dock_update_dock_size
42
 
#include "cairo-dock-icon-facility.h"  // cairo_dock_foreach_icons_of_type
 
42
#include "cairo-dock-icon-facility.h"  // gldi_icons_foreach_of_type
43
43
#include "cairo-dock-keyfile-utilities.h"  // cairo_dock_open_key_file
44
44
#include "cairo-dock-indicator-manager.h"  // cairo_dock_unload_indicator_textures
45
45
#include "cairo-dock-desktop-manager.h"  // cairo_dock_get_current_desktop_and_viewport
 
46
#include "cairo-dock-user-icon-manager.h"  // GLDI_OBJECT_IS_USER_ICON
 
47
#include "cairo-dock-separator-manager.h"  // GLDI_OBJECT_IS_SEPARATOR_ICON
 
48
#include "cairo-dock-applications-manager.h"  // GLDI_OBJECT_IS_APPLI_ICON
46
49
#include "cairo-dock-backends-manager.h"  // cairo_dock_foreach_icon_container_renderer
47
50
#define _MANAGER_DEF_
48
51
#include "cairo-dock-icon-manager.h"
72
75
static void _on_icon_theme_changed (GtkIconTheme *pIconTheme, gpointer data);
73
76
 
74
77
 
75
 
void cairo_dock_free_icon (Icon *icon)
76
 
{
77
 
        gldi_object_unref (GLDI_OBJECT (icon));
78
 
}
79
 
 
80
 
 
81
 
void cairo_dock_delete_icon_from_current_theme (Icon *icon)
82
 
{
83
 
        if (icon->iface.on_delete)
84
 
        {
85
 
                icon->iface.on_delete (icon);
86
 
        }
87
 
}
88
 
 
89
 
void cairo_dock_foreach_icons (CairoDockForeachIconFunc pFunction, gpointer pUserData)
90
 
{
91
 
        cairo_dock_foreach_icons_in_docks (pFunction, pUserData);
 
78
void gldi_icons_foreach (CairoDockForeachIconFunc pFunction, gpointer pUserData)
 
79
{
 
80
        gldi_icons_foreach_in_docks (pFunction, pUserData);
92
81
        gldi_desklets_foreach_icons (pFunction, pUserData);
93
82
}
94
83
 
122
111
}
123
112
static void _hide_icon_on_other_desktops (Icon *icon, G_GNUC_UNUSED GldiContainer *pContainer, gpointer data)
124
113
{
125
 
        if (CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (icon) || CAIRO_DOCK_ICON_TYPE_IS_CONTAINER (icon))
 
114
        if (GLDI_OBJECT_IS_USER_ICON (icon))
126
115
        {
127
116
                int index = GPOINTER_TO_INT (data);
128
117
                _hide_launcher_on_other_desktops (icon, index);
143
132
                else  // the dock doesn't exist any more -> free the icon
144
133
                {
145
134
                        icon->iSpecificDesktop = 0;  // pour ne pas qu'elle soit enlevee de la liste en parallele.
146
 
                        cairo_dock_free_icon (icon);
 
135
                        gldi_object_unref (GLDI_OBJECT (icon));
147
136
                }
148
137
        }
149
138
}
159
148
        int index = iCurrentDesktop * g_desktopGeometry.iNbViewportX * g_desktopGeometry.iNbViewportY + iCurrentViewportX * g_desktopGeometry.iNbViewportY + iCurrentViewportY + 1;  // +1 car on commence a compter a partir de 1.
160
149
        
161
150
        // first detach what shouldn't be shown on this desktop
162
 
        cairo_dock_foreach_icons_in_docks ((CairoDockForeachIconFunc)_hide_icon_on_other_desktops, GINT_TO_POINTER (index));
 
151
        gldi_icons_foreach_in_docks ((CairoDockForeachIconFunc)_hide_icon_on_other_desktops, GINT_TO_POINTER (index));
163
152
        
164
153
        // then reattach what was eventually missing
165
154
        Icon *icon;
187
176
        {
188
177
                icon = ic->data;
189
178
                icon->iSpecificDesktop = 0;  // pour ne pas qu'elle soit enlevee de la liste en parallele.
190
 
                cairo_dock_free_icon (icon);
 
179
                gldi_object_unref (GLDI_OBJECT (icon));
191
180
        }
192
181
        g_list_free (s_pFloatingIconsList);
193
182
        s_pFloatingIconsList = NULL;
773
762
        for (ic = pDock->icons; ic != NULL; ic = ic->next)  // les separateurs utilisateurs ne sont pas recrees, on les recharge donc.
774
763
        {
775
764
                icon = ic->data;
776
 
                if (CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))  // il n'y a que des separateurs utilisateurs dans le dock en ce moment.
 
765
                if (GLDI_OBJECT_IS_SEPARATOR_ICON (icon))  // il n'y a que des separateurs utilisateurs dans le dock en ce moment.
777
766
                {
778
767
                        cairo_dock_load_icon_image (icon, CAIRO_CONTAINER (pDock));
779
768
                }
864
853
        // labels
865
854
        CairoIconsParam *pLabels = pIcons;
866
855
        CairoIconsParam *pPrevLabels = pPrevIcons;
867
 
        cairo_dock_foreach_icons ((CairoDockForeachIconFunc) _reload_one_label, pLabels);
 
856
        gldi_icons_foreach ((CairoDockForeachIconFunc) _reload_one_label, pLabels);
868
857
        
869
858
        if (pPrevLabels->iLabelSize != pLabels->iLabelSize)
870
859
        {
938
927
        
939
928
}
940
929
 
 
930
  ///////////////
 
931
 /// MANAGER ///
 
932
///////////////
 
933
 
 
934
static void _load_image (Icon *icon)
 
935
{
 
936
        int iWidth = cairo_dock_icon_get_allocated_width (icon);
 
937
        int iHeight = cairo_dock_icon_get_allocated_height (icon);
 
938
        cairo_surface_t *pSurface = NULL;
 
939
        
 
940
        if (icon->cFileName)
 
941
        {
 
942
                gchar *cIconPath = cairo_dock_search_icon_s_path (icon->cFileName, MAX (iWidth, iHeight));
 
943
                if (cIconPath != NULL && *cIconPath != '\0')
 
944
                        pSurface = cairo_dock_create_surface_from_image_simple (cIconPath,
 
945
                                iWidth,
 
946
                                iHeight);
 
947
                g_free (cIconPath);
 
948
        }
 
949
        cairo_dock_load_image_buffer_from_surface (&icon->image, pSurface, iWidth, iHeight);
 
950
}
 
951
static void init_object (GldiObject *obj, G_GNUC_UNUSED gpointer attr)
 
952
{
 
953
        Icon *icon = (Icon*)obj;
 
954
        icon->iface.load_image = _load_image;
 
955
}
 
956
 
941
957
static void reset_object (GldiObject *obj)
942
958
{
943
959
        Icon *icon = (Icon*)obj;
950
966
        if (icon->iSidDoubleClickDelay != 0)
951
967
                g_source_remove (icon->iSidDoubleClickDelay);
952
968
        
953
 
        if (CAIRO_DOCK_IS_NORMAL_APPLI (icon))
954
 
        {
955
 
                ///cairo_dock_unregister_appli (icon);
956
 
        }
957
 
        else if (icon->cClass != NULL)  // c'est un inhibiteur.
 
969
        if (icon->cClass != NULL && ! GLDI_OBJECT_IS_APPLI_ICON (icon))  // c'est un inhibiteur.
958
970
                cairo_dock_deinhibite_class (icon->cClass, icon);  // unset the appli if it had any
959
 
        //if (icon->pModuleInstance != NULL)
960
 
        //      gldi_object_unref (GLDI_OBJECT(icon->pModuleInstance));
961
971
        
962
972
        gldi_object_notify (icon, NOTIFICATION_STOP_ICON, icon);
963
973
        cairo_dock_remove_transition_on_icon (icon);
993
1003
        cairo_dock_destroy_icon_overlays (icon);
994
1004
}
995
1005
 
996
 
 
997
 
  ///////////////
998
 
 /// MANAGER ///
999
 
///////////////
1000
 
 
1001
1006
void gldi_register_icons_manager (void)
1002
1007
{
1003
1008
        // Manager
1009
1014
        myIconsMgr.mgr.reload       = (GldiManagerReloadFunc)reload;
1010
1015
        myIconsMgr.mgr.get_config   = (GldiManagerGetConfigFunc)get_config;
1011
1016
        myIconsMgr.mgr.reset_config = (GldiManagerResetConfigFunc)reset_config;
1012
 
        myIconsMgr.mgr.init_object  = NULL;  // nothing to do
 
1017
        myIconsMgr.mgr.init_object  = init_object;
1013
1018
        myIconsMgr.mgr.reset_object = reset_object;
1014
1019
        myIconsMgr.mgr.iObjectSize  = sizeof (Icon);
1015
1020
        // Config