28
28
#include <string.h>
31
#include <gtk/gtkgl.h>
33
32
#include <GL/glu.h>
34
33
#include <GL/glx.h>
35
#include <gdk/x11/gdkglx.h>
37
35
#include <gdk/gdkx.h>
38
36
#include "cairo-dock-draw.h"
39
37
#include "cairo-dock-module-factory.h"
38
#include "cairo-dock-icon-facility.h" // cairo_dock_set_icon_container
40
39
#include "cairo-dock-module-manager.h" // cairo_dock_detach_module_instance
41
40
#include "cairo-dock-dialog-manager.h"
42
41
#include "cairo-dock-icon-factory.h"
43
42
#include "cairo-dock-icon-facility.h"
44
#include "cairo-dock-config.h"
43
#include "cairo-dock-keyfile-utilities.h"
45
44
#include "cairo-dock-X-manager.h"
46
45
#include "cairo-dock-notifications.h"
47
46
#include "cairo-dock-log.h"
72
71
static gboolean on_expose_desklet(GtkWidget *pWidget,
72
#if (GTK_MAJOR_VERSION < 3)
73
73
GdkEventExpose *pExpose,
74
77
CairoDesklet *pDesklet)
76
if (pDesklet->iDesiredWidth != 0 && pDesklet->iDesiredHeight != 0 && (pDesklet->iKnownWidth != pDesklet->iDesiredWidth || pDesklet->iKnownHeight != pDesklet->iDesiredHeight)) // skip the drawing until the desklet has reached its size.
79
if (pDesklet->iDesiredWidth != 0 && pDesklet->iDesiredHeight != 0 && (pDesklet->iKnownWidth != pDesklet->iDesiredWidth || pDesklet->iKnownHeight != pDesklet->iDesiredHeight)) // skip the drawing until the desklet has reached its size, only make it transparent.
78
81
//g_print ("on saute le dessin\n");
81
GdkGLContext *pGlContext = gtk_widget_get_gl_context (pDesklet->container.pWidget);
82
GdkGLDrawable *pGlDrawable = gtk_widget_get_gl_drawable (pDesklet->container.pWidget);
83
if (!gdk_gl_drawable_gl_begin (pGlDrawable, pGlContext))
84
if (! gldi_glx_begin_draw_container (CAIRO_CONTAINER (pDesklet)))
86
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
89
cairo_dock_apply_desktop_background_opengl (CAIRO_CONTAINER (pDesklet));
91
if (gdk_gl_drawable_is_double_buffered (pGlDrawable))
92
gdk_gl_drawable_swap_buffers (pGlDrawable);
95
gdk_gl_drawable_gl_end (pGlDrawable);
87
gldi_glx_end_draw_container (CAIRO_CONTAINER (pDesklet));
105
97
if (g_bUseOpenGL && pDesklet->pRenderer && pDesklet->pRenderer->render_opengl)
107
GdkGLContext *pGlContext = gtk_widget_get_gl_context (pDesklet->container.pWidget);
108
GdkGLDrawable *pGlDrawable = gtk_widget_get_gl_drawable (pDesklet->container.pWidget);
109
if (!gdk_gl_drawable_gl_begin (pGlDrawable, pGlContext))
99
if (! gldi_glx_begin_draw_container (CAIRO_CONTAINER (pDesklet)))
112
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
115
cairo_dock_apply_desktop_background_opengl (CAIRO_CONTAINER (pDesklet));
117
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_RENDER_DESKLET, pDesklet, NULL);
118
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_RENDER_DESKLET, pDesklet, NULL);
120
if (gdk_gl_drawable_is_double_buffered (pGlDrawable))
121
gdk_gl_drawable_swap_buffers (pGlDrawable);
124
gdk_gl_drawable_gl_end (pGlDrawable);
102
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_RENDER, pDesklet, NULL);
104
gldi_glx_end_draw_container (CAIRO_CONTAINER (pDesklet));
128
108
cairo_t *pCairoContext = cairo_dock_create_drawing_context_on_container (CAIRO_CONTAINER (pDesklet));
130
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_RENDER_DESKLET, pDesklet, pCairoContext);
131
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_RENDER_DESKLET, pDesklet, pCairoContext);
110
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_RENDER, pDesklet, pCairoContext);
133
112
cairo_destroy (pCairoContext);
139
118
static void _cairo_dock_set_desklet_input_shape (CairoDesklet *pDesklet)
141
gtk_widget_input_shape_combine_mask (pDesklet->container.pWidget,
120
gldi_container_set_input_shape (CAIRO_CONTAINER (pDesklet), NULL);
145
122
if (pDesklet->bNoInput)
147
GdkBitmap *pShapeBitmap = (GdkBitmap*) gdk_pixmap_new (NULL,
148
pDesklet->container.iWidth,
149
pDesklet->container.iHeight,
152
cairo_t *pCairoContext = gdk_cairo_create (pShapeBitmap);
153
cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
154
cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
155
cairo_paint (pCairoContext);
156
cairo_set_source_rgba (pCairoContext, 1., 1., 1., 1.);
157
cairo_rectangle (pCairoContext,
124
GldiShape *pShapeBitmap = gldi_container_create_input_shape (CAIRO_CONTAINER (pDesklet),
158
125
pDesklet->container.iWidth - myDeskletsParam.iDeskletButtonSize,
159
126
pDesklet->container.iHeight - myDeskletsParam.iDeskletButtonSize,
160
127
myDeskletsParam.iDeskletButtonSize,
161
128
myDeskletsParam.iDeskletButtonSize);
162
cairo_fill (pCairoContext);
163
cairo_destroy (pCairoContext);
164
gtk_widget_input_shape_combine_mask (pDesklet->container.pWidget,
168
g_object_unref (pShapeBitmap);
169
//g_print ("input shape : %dx%d\n", pDesklet->container.iWidth, pDesklet->container.iHeight);
130
gldi_container_set_input_shape (CAIRO_CONTAINER (pDesklet), pShapeBitmap);
132
gldi_shape_destroy (pShapeBitmap);
179
142
G_TYPE_STRING, "Desklet", "size", cSize,
182
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
145
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
184
147
pDesklet->iSidWriteSize = 0;
185
148
pDesklet->iKnownWidth = pDesklet->container.iWidth;
189
152
pDesklet->iDesiredWidth = 0;
190
153
pDesklet->iDesiredHeight = 0;
192
cairo_t *pCairoContext = cairo_dock_create_drawing_context_generic (CAIRO_CONTAINER (pDesklet));
193
155
cairo_dock_load_desklet_decorations (pDesklet);
194
cairo_destroy (pCairoContext);
196
157
if (pDesklet->pIcon != NULL && pDesklet->pIcon->pModuleInstance != NULL)
223
184
pIcon->iImageWidth = pIcon->fWidth;
224
185
pIcon->iImageHeight = pIcon->fHeight;
225
cairo_dock_trigger_load_icon_buffers (pIcon, CAIRO_CONTAINER (pDesklet));
186
cairo_dock_trigger_load_icon_buffers (pIcon);
237
198
gtk_widget_queue_draw (pDesklet->container.pWidget); // sinon on ne redessine que l'interieur.
240
Window Xid = GDK_WINDOW_XID (pDesklet->container.pWidget->window);
241
201
if (pDesklet->bSpaceReserved) // l'espace est reserve, on reserve la nouvelle taille.
243
203
_cairo_dock_reserve_space_for_desklet (pDesklet, TRUE);
257
217
int iNumDesktop = -1;
258
218
if (! cairo_dock_desklet_is_sticky (pDesklet))
260
GdkWindow *window = pDesklet->container.pWidget->window;
261
Window Xid = GDK_WINDOW_XID (window);
220
Window Xid = gldi_container_get_Xid (CAIRO_CONTAINER (pDesklet));
262
221
cd_debug ("This window (%d) is not sticky", (int) Xid);
263
222
int iDesktop = cairo_dock_get_xwindow_desktop (Xid);
264
223
int iGlobalPositionX, iGlobalPositionY, iWidthExtent, iHeightExtent;
291
250
G_TYPE_INT, "Desklet", "y position", iRelativePositionY,
292
251
G_TYPE_INT, "Desklet", "num desktop", iNumDesktop,
294
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
253
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
297
256
if (pDesklet->bSpaceReserved) // l'espace est reserve, on reserve a la nouvelle position.
315
274
if ((pEvent->width < pDesklet->container.iWidth || pEvent->height < pDesklet->container.iHeight) && (pDesklet->iDesiredWidth != 0 && pDesklet->iDesiredHeight != 0))
317
gdk_window_resize (pDesklet->container.pWidget->window,
276
gdk_window_resize (gldi_container_get_gdk_window (CAIRO_CONTAINER (pDesklet)),
318
277
pDesklet->iDesiredWidth,
319
278
pDesklet->iDesiredHeight);
325
284
if (g_bUseOpenGL)
327
GdkGLContext* pGlContext = gtk_widget_get_gl_context (pWidget);
328
GdkGLDrawable* pGlDrawable = gtk_widget_get_gl_drawable (pWidget);
329
286
GLsizei w = pEvent->width;
330
287
GLsizei h = pEvent->height;
331
if (!gdk_gl_drawable_gl_begin (pGlDrawable, pGlContext))
289
if (! gldi_glx_make_current (CAIRO_CONTAINER (pDesklet)))
334
292
glViewport(0, 0, w, h);
336
294
cairo_dock_set_perspective_view (CAIRO_CONTAINER (pDesklet));
338
gdk_gl_drawable_gl_end (pGlDrawable);
341
297
if (pDesklet->bNoInput)
386
342
if (! (pScroll->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK)))
388
344
Icon *icon = cairo_dock_find_clicked_icon_in_desklet (pDesklet); // can be NULL
389
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_SCROLL_ICON, icon, pDesklet, pScroll->direction);
390
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_SCROLL_ICON, icon, pDesklet, pScroll->direction);
345
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_SCROLL_ICON, icon, pDesklet, pScroll->direction);
397
352
CairoDesklet *pDesklet)
399
354
cd_debug ("unmap desklet (bAllowMinimize:%d)\n", pDesklet->bAllowMinimize);
400
Window Xid = GDK_WINDOW_XID (pWidget->window);
355
Window Xid = gldi_container_get_Xid (CAIRO_CONTAINER (pDesklet));
401
356
if (pDesklet->iVisibility == CAIRO_DESKLET_ON_WIDGET_LAYER) // on the widget layer, let pass the unmap event..
402
357
//if (cairo_dock_window_is_utility (Xid)) // sur la couche des widgets, on ne fait rien.
473
428
G_TYPE_INT, "Desklet", "rotation", (int) (pDesklet->fRotation / G_PI * 180.),
475
430
gtk_widget_queue_draw (pDesklet->container.pWidget);
476
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
431
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
478
433
else if (pDesklet->retaching)
502
457
_cairo_dock_set_desklet_input_shape (pDesklet);
503
458
gtk_widget_queue_draw (pDesklet->container.pWidget);
504
if (pDesklet->bNoInput)
505
cairo_dock_allow_widget_to_receive_data (pDesklet->container.pWidget, G_CALLBACK (on_drag_data_received_desklet), pDesklet);
459
/**if (pDesklet->bNoInput)
460
gldi_container_enable_drop (CAIRO_CONTAINER (pDesklet), G_CALLBACK (on_drag_data_received_desklet), pDesklet);
507
cairo_dock_disallow_widget_to_receive_data (pDesklet->container.pWidget);
462
gldi_container_disable_drop (CAIRO_CONTAINER (pDesklet));*/
510
465
else if (pDesklet->rotatingY)
528
483
Icon *pClickedIcon = cairo_dock_find_clicked_icon_in_desklet (pDesklet);
529
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_CLICK_ICON, pClickedIcon, pDesklet, pButton->state);
530
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_CLICK_ICON, pClickedIcon, pDesklet, pButton->state);
484
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_CLICK_ICON, pClickedIcon, pDesklet, pButton->state);
533
487
pDesklet->rotating = FALSE;
541
495
if (! (pButton->x < myDeskletsParam.iDeskletButtonSize && pButton->y < myDeskletsParam.iDeskletButtonSize) && ! (pButton->x > (pDesklet->container.iWidth - myDeskletsParam.iDeskletButtonSize)/2 && pButton->x < (pDesklet->container.iWidth + myDeskletsParam.iDeskletButtonSize)/2 && pButton->y < myDeskletsParam.iDeskletButtonSize))
543
497
Icon *pClickedIcon = cairo_dock_find_clicked_icon_in_desklet (pDesklet); // can be NULL
544
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_DOUBLE_CLICK_ICON, pClickedIcon, pDesklet);
545
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_DOUBLE_CLICK_ICON, pClickedIcon, pDesklet);
498
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_DOUBLE_CLICK_ICON, pClickedIcon, pDesklet);
563
516
cairo_dock_update_conf_file (pDesklet->pIcon->pModuleInstance->cConfFilePath,
564
517
G_TYPE_INT, "Desklet", "rotation", 0,
566
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
519
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_CONFIGURE_DESKLET, pDesklet);
568
521
else if (pButton->x > (pDesklet->container.iWidth - myDeskletsParam.iDeskletButtonSize)/2 && pButton->x < (pDesklet->container.iWidth + myDeskletsParam.iDeskletButtonSize)/2 && pButton->y < myDeskletsParam.iDeskletButtonSize)
586
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_MIDDLE_CLICK_ICON, pDesklet->pIcon, pDesklet);
587
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_MIDDLE_CLICK_ICON, pDesklet->pIcon, pDesklet);
539
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_MIDDLE_CLICK_ICON, pDesklet->pIcon, pDesklet);
595
547
//g_print ("%s (%dx%d)\n", __func__, x, y);
597
549
//\_________________ On recupere l'URI.
598
gchar *cReceivedData = (gchar *) selection_data->data; // gtk_selection_data_get_text
550
gchar *cReceivedData = (gchar *) gtk_selection_data_get_text (selection_data);
599
551
g_return_if_fail (cReceivedData != NULL);
600
552
int length = strlen (cReceivedData);
601
553
if (cReceivedData[length-1] == '\n')
622
574
pDesklet->container.iMouseX = pMotion->x;
623
575
pDesklet->container.iMouseY = pMotion->y;
624
576
gboolean bStartAnimation = FALSE;
625
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_MOUSE_MOVED, pDesklet, &bStartAnimation);
626
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_MOUSE_MOVED, pDesklet, &bStartAnimation);
577
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_MOUSE_MOVED, pDesklet, &bStartAnimation);
627
578
if (bStartAnimation)
628
579
cairo_dock_launch_animation (CAIRO_CONTAINER (pDesklet));
671
622
pIcon->bPointed = TRUE;
673
624
//g_print ("on survole %s\n", pIcon->cName);
674
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_ENTER_ICON, pIcon, pDesklet, &bStartAnimation);
675
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_ENTER_ICON, pIcon, pDesklet, &bStartAnimation);
625
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_ENTER_ICON, pIcon, pDesklet, &bStartAnimation);
683
633
pPointedIcon->bPointed = FALSE;
685
635
//g_print ("kedal\n");
686
cairo_dock_notify_on_object (&myContainersMgr, NOTIFICATION_ENTER_ICON, pPointedIcon, pDesklet, &bStartAnimation);
687
cairo_dock_notify_on_object (CAIRO_CONTAINER (pDesklet), NOTIFICATION_ENTER_ICON, pPointedIcon, pDesklet, &bStartAnimation);
636
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_ENTER_ICON, pPointedIcon, pDesklet, &bStartAnimation);
690
639
if (bStartAnimation)
716
665
pDesklet->container.bInside = TRUE;
717
666
gtk_widget_queue_draw (pWidget); // redessin des boutons.
721
gboolean bStartAnimation = FALSE;
722
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_ENTER_DESKLET, pDesklet, &bStartAnimation);
723
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_ENTER_DESKLET, pDesklet, &bStartAnimation);
725
cairo_dock_launch_animation (CAIRO_CONTAINER (pDesklet));
668
gboolean bStartAnimation = FALSE;
669
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_ENTER_DESKLET, pDesklet, &bStartAnimation);
671
cairo_dock_launch_animation (CAIRO_CONTAINER (pDesklet));
734
679
//g_print ("%s (%d)\n", __func__, pDesklet->container.bInside);
735
680
int iMouseX, iMouseY;
736
gdk_window_get_pointer (pWidget->window, &iMouseX, &iMouseY, NULL);
681
GdkWindow *window = gldi_container_get_gdk_window (CAIRO_CONTAINER (pDesklet));
682
gdk_window_get_pointer (window, &iMouseX, &iMouseY, NULL);
737
683
if (gtk_bin_get_child (GTK_BIN (pDesklet->container.pWidget)) != NULL && iMouseX > 0 && iMouseX < pDesklet->container.iWidth && iMouseY > 0 && iMouseY < pDesklet->container.iHeight) // en fait on est dans un widget fils, donc on ne fait rien.
743
689
gtk_widget_queue_draw (pWidget); // redessin des boutons.
745
691
gboolean bStartAnimation = FALSE;
746
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_LEAVE_DESKLET, pDesklet, &bStartAnimation);
747
692
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_LEAVE_DESKLET, pDesklet, &bStartAnimation);
748
693
if (bStartAnimation)
749
694
cairo_dock_launch_animation (CAIRO_CONTAINER (pDesklet));
759
static void _cairo_dock_set_icon_size (CairoContainer *pContainer, Icon *icon)
705
static gboolean _cairo_desklet_animation_loop (CairoContainer *pContainer)
761
707
CairoDesklet *pDesklet = CAIRO_DESKLET (pContainer);
762
/**if (pDesklet->pRenderer && pDesklet->pRenderer->set_icon_size)
763
pDesklet->pRenderer->set_icon_size (pDesklet, icon);*/
708
gboolean bContinue = FALSE;
709
gboolean bUpdateSlowAnimation = FALSE;
710
pContainer->iAnimationStep ++;
711
if (pContainer->iAnimationStep * pContainer->iAnimationDeltaT >= CAIRO_DOCK_MIN_SLOW_DELTA_T)
713
bUpdateSlowAnimation = TRUE;
714
pContainer->iAnimationStep = 0;
715
pContainer->bKeepSlowAnimation = FALSE;
718
if (pDesklet->pIcon != NULL)
720
gboolean bIconIsAnimating = FALSE;
722
if (bUpdateSlowAnimation)
724
cairo_dock_notify_on_object (pDesklet->pIcon, NOTIFICATION_UPDATE_ICON_SLOW, pDesklet->pIcon, pDesklet, &bIconIsAnimating);
725
pDesklet->container.bKeepSlowAnimation |= bIconIsAnimating;
728
cairo_dock_notify_on_object (pDesklet->pIcon, NOTIFICATION_UPDATE_ICON, pDesklet->pIcon, pDesklet, &bIconIsAnimating);
729
if (! bIconIsAnimating)
730
pDesklet->pIcon->iAnimationState = CAIRO_DOCK_STATE_REST;
735
if (bUpdateSlowAnimation)
737
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_UPDATE_SLOW, pDesklet, &pContainer->bKeepSlowAnimation);
740
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_UPDATE, pDesklet, &bContinue);
742
if (! bContinue && ! pContainer->bKeepSlowAnimation)
744
pContainer->iSidGLAnimation = 0;
766
751
CairoDesklet *cairo_dock_new_desklet (void)
773
758
pDesklet->container.fRatio = 1;
774
759
pDesklet->container.fRatio = 1;
776
pDesklet->container.iface.set_icon_size = _cairo_dock_set_icon_size;
761
pDesklet->container.iface.animation_loop = _cairo_desklet_animation_loop;
778
763
GtkWidget* pWindow = cairo_dock_init_container (CAIRO_CONTAINER (pDesklet));
779
cairo_dock_install_notifications_on_object (pDesklet, NB_NOTIFICATIONS_DESKLET);
764
gldi_object_set_manager (GLDI_OBJECT (pDesklet), GLDI_MANAGER (&myDeskletsMgr));
781
766
gtk_window_set_title (GTK_WINDOW(pWindow), "cairo-dock-desklet");
782
767
gtk_widget_add_events( pWindow, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_FOCUS_CHANGE_MASK);
784
769
gtk_window_set_default_size(GTK_WINDOW(pWindow), 10, 10); // idem.
786
771
g_signal_connect (G_OBJECT (pWindow),
772
#if (GTK_MAJOR_VERSION < 3)
788
777
G_CALLBACK (on_expose_desklet),
790
779
g_signal_connect (G_OBJECT (pWindow),
828
817
G_CALLBACK (on_scroll_desklet),
830
cairo_dock_allow_widget_to_receive_data (pWindow, G_CALLBACK (on_drag_data_received_desklet), pDesklet);
819
gldi_container_enable_drop (CAIRO_CONTAINER (pDesklet), G_CALLBACK (on_drag_data_received_desklet), pDesklet);
832
821
gtk_widget_show_all (pWindow);
843
832
g_source_remove (pDesklet->iSidWriteSize);
844
833
if (pDesklet->iSidWritePosition != 0)
845
834
g_source_remove (pDesklet->iSidWritePosition);
846
cairo_dock_notify_on_object (&myDeskletsMgr, NOTIFICATION_STOP_DESKLET, pDesklet);
847
cairo_dock_notify_on_object (pDesklet, NOTIFICATION_STOP_DESKLET, pDesklet);
849
836
cairo_dock_steal_interactive_widget_from_desklet (pDesklet);
851
cairo_dock_finish_container (CAIRO_CONTAINER (pDesklet));
838
cairo_dock_finish_container (CAIRO_CONTAINER (pDesklet)); // -> NOTIFICATION_DESTROY
853
840
if (pDesklet->pRenderer != NULL)
883
870
pDesklet->iDesiredWidth = pAttribute->iDeskletWidth;
884
871
pDesklet->iDesiredHeight = pAttribute->iDeskletHeight;
885
gdk_window_resize (pDesklet->container.pWidget->window,
872
gdk_window_resize (gldi_container_get_gdk_window (CAIRO_CONTAINER (pDesklet)),
886
873
pAttribute->iDeskletWidth,
887
874
pAttribute->iDeskletHeight);
898
885
iAbsolutePositionY = MAX (0, MIN (g_desktopGeometry.iXScreenHeight[CAIRO_DOCK_HORIZONTAL] - pAttribute->iDeskletHeight, iAbsolutePositionY));
900
887
if (pAttribute->bOnAllDesktops)
901
gdk_window_move(pDesklet->container.pWidget->window,
888
gdk_window_move (gldi_container_get_gdk_window (CAIRO_CONTAINER (pDesklet)),
902
889
iAbsolutePositionX,
903
890
iAbsolutePositionY);
904
891
//g_print (" let's place the deklet at (%d;%d)", iAbsolutePositionX, iAbsolutePositionY);
914
901
gtk_window_unstick (GTK_WINDOW (pDesklet->container.pWidget));
915
Window Xid = GDK_WINDOW_XID (pDesklet->container.pWidget->window);
902
Window Xid = gldi_container_get_Xid (CAIRO_CONTAINER (pDesklet));
916
903
if (g_desktopGeometry.iNbViewportX > 0 && g_desktopGeometry.iNbViewportY > 0)
918
905
int iNumDesktop, iNumViewportX, iNumViewportY;
935
922
pDesklet->bPositionLocked = pAttribute->bPositionLocked;
936
923
pDesklet->bNoInput = pAttribute->bNoInput;
937
if (pDesklet->bNoInput)
938
cairo_dock_disallow_widget_to_receive_data (pDesklet->container.pWidget);
924
/**if (pDesklet->bNoInput)
925
gldi_container_disable_drop (CAIRO_CONTAINER (pDesklet));*/
939
926
pDesklet->fRotation = pAttribute->iRotation / 180. * G_PI ;
940
927
pDesklet->fDepthRotationY = pAttribute->iDepthRotationY / 180. * G_PI ;
941
928
pDesklet->fDepthRotationX = pAttribute->iDepthRotationX / 180. * G_PI ;
950
937
//cd_debug ("%s (%dx%d ; %d)", __func__, pDesklet->iDesiredWidth, pDesklet->iDesiredHeight, pDesklet->iSidWriteSize);
951
938
if (pDesklet->iDesiredWidth == 0 && pDesklet->iDesiredHeight == 0 && pDesklet->iSidWriteSize == 0)
953
cairo_t *pCairoContext = cairo_dock_create_drawing_context_generic (CAIRO_CONTAINER (pDesklet));
954
940
cairo_dock_load_desklet_decorations (pDesklet);
955
cairo_destroy (pCairoContext);
1030
1015
//gtk_container_add (GTK_CONTAINER (pDesklet->container.pWidget), pInteractiveWidget);
1031
GtkWidget *pHBox = gtk_hbox_new (FALSE, 0);
1016
GtkWidget *pHBox = _gtk_hbox_new (0);
1032
1017
gtk_container_add (GTK_CONTAINER (pDesklet->container.pWidget), pHBox);
1034
1019
gtk_box_pack_start (GTK_BOX (pHBox), pInteractiveWidget, TRUE, TRUE, 0);
1037
1022
if (iRightMargin != 0)
1039
GtkWidget *pMarginBox = gtk_vbox_new (FALSE, 0);
1040
gtk_widget_set (pMarginBox, "width-request", iRightMargin, NULL);
1024
GtkWidget *pMarginBox = _gtk_vbox_new (0);
1025
g_object_set (pMarginBox, "width-request", iRightMargin, NULL);
1041
1026
gtk_box_pack_start (GTK_BOX (pHBox), pMarginBox, FALSE, FALSE, 0); // a tester ...
1057
1042
if (pChildList->next != NULL)
1059
1044
GtkWidget *pMarginBox = GTK_WIDGET (pChildList->next->data);
1060
gtk_widget_set (pMarginBox, "width-request", iRightMargin, NULL);
1045
g_object_set (pMarginBox, "width-request", iRightMargin, NULL);
1062
1047
else // on rajoute le widget de la marge.
1064
GtkWidget *pMarginBox = gtk_vbox_new (FALSE, 0);
1065
gtk_widget_set (pMarginBox, "width-request", iRightMargin, NULL);
1049
GtkWidget *pMarginBox = _gtk_vbox_new (0);
1050
g_object_set (pMarginBox, "width-request", iRightMargin, NULL);
1066
1051
gtk_box_pack_start (GTK_BOX (pHBox), pMarginBox, FALSE, FALSE, 0);
1068
1053
g_list_free (pChildList);
1118
1103
static void _cairo_dock_reserve_space_for_desklet (CairoDesklet *pDesklet, gboolean bReserve)
1120
1105
cd_debug ("%s (%d)\n", __func__, bReserve);
1121
Window Xid = GDK_WINDOW_XID (pDesklet->container.pWidget->window);
1106
Window Xid = gldi_container_get_Xid (CAIRO_CONTAINER (pDesklet));
1122
1107
int left=0, right=0, top=0, bottom=0;
1123
1108
int left_start_y=0, left_end_y=0, right_start_y=0, right_end_y=0, top_start_x=0, top_end_x=0, bottom_start_x=0, bottom_end_x=0;
1124
1109
int iHeight = pDesklet->container.iHeight, iWidth = pDesklet->container.iWidth;
1171
1156
gtk_window_set_keep_above (GTK_WINDOW (pDesklet->container.pWidget), iVisibility == CAIRO_DESKLET_KEEP_ABOVE);
1173
Window Xid = GDK_WINDOW_XID (pDesklet->container.pWidget->window);
1158
Window Xid = gldi_container_get_Xid (CAIRO_CONTAINER (pDesklet));
1174
1159
cairo_dock_wm_set_on_widget_layer (Xid, iVisibility == CAIRO_DESKLET_ON_WIDGET_LAYER);
1176
1161
if (iVisibility == CAIRO_DESKLET_RESERVE_SPACE)
1223
1208
gboolean cairo_dock_desklet_is_sticky (CairoDesklet *pDesklet)
1225
GdkWindow *window = pDesklet->container.pWidget->window;
1226
#if (GDK_MAJOR_VERSION >= 3)
1227
return (window->state & GDK_WINDOW_STATE_STICKY); // API change: http://mail.gnome.org/archives/commits-list/2010-July/msg00002.html
1210
GdkWindow *window = gldi_container_get_gdk_window (CAIRO_CONTAINER (pDesklet));
1211
#if (GTK_MAJOR_VERSION >= 3)
1212
return ((gdk_window_get_state (window)) & GDK_WINDOW_STATE_STICKY);
1229
1214
return (((GdkWindowObject*) window)->state & GDK_WINDOW_STATE_STICKY);
1264
1249
pIcon->iImageWidth = pIcon->fWidth;
1265
1250
pIcon->iImageHeight = pIcon->fHeight;
1266
cairo_dock_trigger_load_icon_buffers (pIcon, CAIRO_CONTAINER (pDesklet));
1251
cairo_dock_trigger_load_icon_buffers (pIcon);
1281
1266
pDesklet->icons = g_list_insert_sorted (pDesklet->icons,
1283
1268
(GCompareFunc)cairo_dock_compare_icons_order);
1284
icon->pContainerForLoad = CAIRO_CONTAINER (pDesklet);
1269
cairo_dock_set_icon_container (icon, pDesklet);
1286
1271
// calculate icons
1287
1272
cairo_dock_update_desklet_icons (pDesklet);
1300
1285
pDesklet->icons = g_list_delete_link (pDesklet->icons, ic);
1302
icon->pContainerForLoad = NULL;
1287
cairo_dock_set_icon_container (icon, NULL);
1304
1289
// calculate icons
1305
1290
cairo_dock_update_desklet_icons (pDesklet);