cairo-dock-team team mailing list archive
-
cairo-dock-team team
-
Mailing list archive
-
Message #03149
[Merge] lp:~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3 into lp:ubuntu/cairo-dock
Matthieu Baerts has proposed merging lp:~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3 into lp:ubuntu/cairo-dock.
Requested reviews:
Ubuntu Sponsors Team (ubuntu-sponsors)
Related bugs:
Bug #797273 in cairo-dock (Ubuntu): "Rhythmbox crashes cairo-dock everytime rhythmbox is started."
https://bugs.launchpad.net/ubuntu/+source/cairo-dock/+bug/797273
Bug #799773 in cairo-dock (Ubuntu): "Please update Cairo-Dock to 2.3.0~3 version (bugs fixed only) "
https://bugs.launchpad.net/ubuntu/+source/cairo-dock/+bug/799773
For more details, see:
https://code.launchpad.net/~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3/+merge/65211
This is a bugs fixed version:
How to reproduce the bugs:
* Cairo-Dock (without the OpenGL backend, version 2.3.0~1) crashes if we group windows with the same class in a subdock and then we click on the subdock to maximise windows.
* Slowly leave the dock (version 2.3.0~1) with the cursor on the edge of it and the dock will stay zoomed and active.
* Cairo-Dock (version 2.3.0~1 and 2.3.0~2.1) crashes when the musicPlayer applet is in desklet mode and applets are separated from launchers and the music-player is launched at the same time.
Thank you
PS: please don't forget to update our plug-ins too. (LP: #799774)
--
https://code.launchpad.net/~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3/+merge/65211
Your team Cairo-Dock Team is subscribed to branch lp:~cairo-dock-team/ubuntu/oneiric/cairo-dock/2.3.0-3.
=== removed directory '.pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch'
=== removed directory '.pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch/src'
=== removed directory '.pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch/src/gldit'
=== removed file '.pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch/src/gldit/cairo-dock-dock-facility.c'
--- .pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch/src/gldit/cairo-dock-dock-facility.c 2011-05-21 21:03:26 +0000
+++ .pc/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch/src/gldit/cairo-dock-dock-facility.c 1970-01-01 00:00:00 +0000
@@ -1,1243 +0,0 @@
-/**
-* This file is a part of the Cairo-Dock project
-*
-* Copyright : (C) see the 'copyright' file.
-* E-mail : see the 'copyright' file.
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License
-* as published by the Free Software Foundation; either version 3
-* of the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU General Public License for more details.
-* You should have received a copy of the GNU General Public License
-* along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <math.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-#include <gtk/gtk.h>
-#include <gdk/gdkx.h>
-
-#include <cairo.h>
-#include <pango/pango.h>
-#include <librsvg/rsvg.h>
-#include <librsvg/rsvg-cairo.h>
-
-#ifdef HAVE_GLITZ
-#include <glitz-glx.h>
-#include <cairo-glitz.h>
-#endif
-
-#include <gtk/gtkgl.h>
-#include <X11/extensions/Xrender.h>
-#include <X11/extensions/shape.h>
-#include <GL/gl.h>
-#include <GL/glu.h>
-#include <GL/glx.h>
-#include <gdk/x11/gdkglx.h>
-
-#include "cairo-dock-draw.h"
-#include "cairo-dock-applications-manager.h"
-#include "cairo-dock-image-buffer.h"
-#include "cairo-dock-config.h"
-#include "cairo-dock-module-factory.h"
-#include "cairo-dock-callbacks.h"
-#include "cairo-dock-icon-factory.h"
-#include "cairo-dock-icon-facility.h"
-#include "cairo-dock-separator-factory.h"
-#include "cairo-dock-launcher-factory.h"
-#include "cairo-dock-backends-manager.h" // myBackendsParam.fSubDockSizeRatio
-#include "cairo-dock-X-utilities.h"
-#include "cairo-dock-log.h"
-#include "cairo-dock-keyfile-utilities.h"
-#include "cairo-dock-dock-manager.h"
-#include "cairo-dock-dialog-manager.h"
-#include "cairo-dock-notifications.h"
-#include "cairo-dock-indicator-manager.h" // myIndicators.bUseClassIndic
-#include "cairo-dock-class-manager.h"
-#include "cairo-dock-animations.h"
-#include "cairo-dock-emblem.h"
-#include "cairo-dock-X-manager.h"
-#include "cairo-dock-dock-facility.h"
-
-extern CairoDockDesktopGeometry g_desktopGeometry;
-
-void cairo_dock_reload_reflects_in_dock (CairoDock *pDock)
-{
- cairo_t *pCairoContext = cairo_dock_create_drawing_context_generic (CAIRO_CONTAINER (pDock));
- Icon *icon;
- GList *ic;
- for (ic = pDock->icons; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- if (icon->pReflectionBuffer != NULL)
- {
- cairo_dock_add_reflection_to_icon (icon, CAIRO_CONTAINER (pDock));
- }
- }
- cairo_destroy (pCairoContext);
-}
-
-
-void cairo_dock_update_dock_size (CairoDock *pDock) // iMaxIconHeight et fFlatDockWidth doivent avoir ete mis a jour au prealable.
-{
- //g_print ("%s ()\n", __func__);
- g_return_if_fail (pDock != NULL);
- int iPrevMaxDockHeight = pDock->iMaxDockHeight;
- int iPrevMaxDockWidth = pDock->iMaxDockWidth;
-
- if (pDock->container.fRatio != 0/* && pDock->container.fRatio != 1*/) // on remet leur taille reelle aux icones, sinon le calcul de max_dock_size sera biaise.
- {
- GList *ic;
- Icon *icon;
- pDock->fFlatDockWidth = -myIconsParam.iIconGap;
- pDock->iMaxIconHeight = 0;
- for (ic = pDock->icons; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- icon->fWidth /= pDock->container.fRatio;
- icon->fHeight /= pDock->container.fRatio;
- pDock->fFlatDockWidth += icon->fWidth + myIconsParam.iIconGap;
- if (! CAIRO_DOCK_ICON_TYPE_IS_SEPARATOR (icon))
- pDock->iMaxIconHeight = MAX (pDock->iMaxIconHeight, icon->fHeight);
- }
- if (pDock->iMaxIconHeight == 0)
- pDock->iMaxIconHeight = 10;
- pDock->container.fRatio = 1.;
- }
- pDock->pRenderer->compute_size (pDock);
-
- double hmax = pDock->iMaxIconHeight;
- int iMaxAuthorizedWidth = cairo_dock_get_max_authorized_dock_width (pDock);
- int n = 0;
- do
- {
- double fPrevRatio = pDock->container.fRatio;
- //g_print (" %s (%d / %d)\n", __func__, (int)pDock->iMaxDockWidth, iMaxAuthorizedWidth);
- if (pDock->iMaxDockWidth > iMaxAuthorizedWidth)
- {
- pDock->container.fRatio *= 1. * iMaxAuthorizedWidth / pDock->iMaxDockWidth;
- }
- else
- {
- double fMaxRatio = (pDock->iRefCount == 0 ? 1 : myBackendsParam.fSubDockSizeRatio);
- if (pDock->container.fRatio < fMaxRatio)
- {
- pDock->container.fRatio *= 1. * iMaxAuthorizedWidth / pDock->iMaxDockWidth;
- pDock->container.fRatio = MIN (pDock->container.fRatio, fMaxRatio);
- }
- else
- pDock->container.fRatio = fMaxRatio;
- }
-
- if (pDock->iMaxDockHeight > g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal])
- {
- pDock->container.fRatio = MIN (pDock->container.fRatio, fPrevRatio * g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] / pDock->iMaxDockHeight);
- }
-
- if (fPrevRatio != pDock->container.fRatio)
- {
- //g_print (" -> changement du ratio : %.3f -> %.3f (%d, %d try)\n", fPrevRatio, pDock->container.fRatio, pDock->iRefCount, n);
- Icon *icon;
- GList *ic;
- pDock->fFlatDockWidth = -myIconsParam.iIconGap;
- for (ic = pDock->icons; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- icon->fWidth *= pDock->container.fRatio / fPrevRatio;
- icon->fHeight *= pDock->container.fRatio / fPrevRatio;
- pDock->fFlatDockWidth += icon->fWidth + myIconsParam.iIconGap;
- }
- hmax *= pDock->container.fRatio / fPrevRatio;
-
- pDock->pRenderer->compute_size (pDock);
- }
-
- //g_print ("*** ratio : %.3f -> %.3f\n", fPrevRatio, pDock->container.fRatio);
- n ++;
- } while ((pDock->iMaxDockWidth > iMaxAuthorizedWidth || pDock->iMaxDockHeight > g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] || (pDock->container.fRatio < 1 && pDock->iMaxDockWidth < iMaxAuthorizedWidth-5)) && n < 8);
- pDock->iMaxIconHeight = hmax;
- //g_print (">>> iMaxIconHeight : %d, ratio : %.2f, fFlatDockWidth : %.2f\n", (int) pDock->iMaxIconHeight, pDock->container.fRatio, pDock->fFlatDockWidth);
-
- pDock->pRenderer->calculate_icons (pDock); // le calcul de max_dock_size a altere les fX et fY.
-
- pDock->bWMIconsNeedUpdate = TRUE;
- ///cairo_dock_trigger_set_WM_icons_geometry (pDock);
-
- cairo_dock_update_input_shape (pDock);
-
- if (GTK_WIDGET_VISIBLE (pDock->container.pWidget) && (iPrevMaxDockHeight != pDock->iMaxDockHeight || iPrevMaxDockWidth != pDock->iMaxDockWidth))
- {
- //g_print ("*******%s (%dx%d -> %dx%d)\n", __func__, iPrevMaxDockWidth, iPrevMaxDockHeight, pDock->iMaxDockWidth, pDock->iMaxDockHeight);
- cairo_dock_move_resize_dock (pDock);
- }
-
- cairo_dock_trigger_load_dock_background (pDock);
-
- if (pDock->iRefCount == 0 && pDock->iVisibility == CAIRO_DOCK_VISI_RESERVE && iPrevMaxDockHeight != pDock->iMaxDockHeight)
- cairo_dock_reserve_space_for_dock (pDock, TRUE);
-}
-
-Icon *cairo_dock_calculate_dock_icons (CairoDock *pDock)
-{
- Icon *pPointedIcon = pDock->pRenderer->calculate_icons (pDock);
- cairo_dock_manage_mouse_position (pDock);
- return (pDock->iMousePositionType == CAIRO_DOCK_MOUSE_INSIDE ? pPointedIcon : NULL);
-}
-
-
-
- ////////////////////////////////
- /// WINDOW SIZE AND POSITION ///
-////////////////////////////////
-
-void cairo_dock_reserve_space_for_dock (CairoDock *pDock, gboolean bReserve)
-{
- Window Xid = GDK_WINDOW_XID (pDock->container.pWidget->window);
- int left=0, right=0, top=0, bottom=0;
- 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;
-
- if (bReserve)
- {
- int iWindowPositionX = pDock->container.iWindowPositionX, iWindowPositionY = pDock->container.iWindowPositionY;
-
- int w = pDock->iMinDockWidth;
- int h = pDock->iMinDockHeight;
- int x, y; // position qu'aurait la fenetre du dock s'il avait la taille minimale.
- cairo_dock_get_window_position_at_balance (pDock, w, h, &x, &y);
-
- if (pDock->container.bDirectionUp)
- {
- if (pDock->container.bIsHorizontal)
- {
- bottom = h + pDock->iGapY;
- bottom_start_x = x;
- bottom_end_x = x + w;
- }
- else
- {
- right = h + pDock->iGapY;
- right_start_y = x;
- right_end_y = x + w;
- }
- }
- else
- {
- if (pDock->container.bIsHorizontal)
- {
- top = h + pDock->iGapY;
- top_start_x = x;
- top_end_x = x + w;
- }
- else
- {
- left = h + pDock->iGapY;
- left_start_y = x;
- left_end_y = x + w;
- }
- }
- }
-
- cairo_dock_set_strut_partial (Xid, left, right, top, bottom, left_start_y, left_end_y, right_start_y, right_end_y, top_start_x, top_end_x, bottom_start_x, bottom_end_x);
- /*if ((bReserve && ! pDock->container.bDirectionUp) || (g_iWmHint == GDK_WINDOW_TYPE_HINT_DOCK)) // merci a Robrob pour le patch !
- cairo_dock_set_xwindow_type_hint (Xid, "_NET_WM_WINDOW_TYPE_DOCK"); // gtk_window_set_type_hint ne marche que sur une fenetre avant de la rendre visible !
- else if (g_iWmHint == GDK_WINDOW_TYPE_HINT_NORMAL)
- cairo_dock_set_xwindow_type_hint (Xid, "_NET_WM_WINDOW_TYPE_NORMAL"); // idem.
- else if (g_iWmHint == GDK_WINDOW_TYPE_HINT_TOOLBAR)
- cairo_dock_set_xwindow_type_hint (Xid, "_NET_WM_WINDOW_TYPE_TOOLBAR"); // idem.*/
-}
-
-void cairo_dock_prevent_dock_from_out_of_screen (CairoDock *pDock)
-{
- int x, y; // position du point invariant du dock.
- x = pDock->container.iWindowPositionX + pDock->container.iWidth * pDock->fAlign;
- y = (pDock->container.bDirectionUp ? pDock->container.iWindowPositionY + pDock->container.iHeight : pDock->container.iWindowPositionY);
- //cd_debug ("%s (%d;%d)", __func__, x, y);
-
- pDock->iGapX = x - g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] * pDock->fAlign;
- pDock->iGapY = (pDock->container.bDirectionUp ? g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] - y : y);
- //cd_debug (" -> (%d;%d)", pDock->iGapX, pDock->iGapY);
-
- if (pDock->iGapX < - g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal]/2)
- pDock->iGapX = - g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal]/2;
- if (pDock->iGapX > g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal]/2)
- pDock->iGapX = g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal]/2;
- if (pDock->iGapY < 0)
- pDock->iGapY = 0;
- if (pDock->iGapY > g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal])
- pDock->iGapY = g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal];
-}
-
-#define CD_VISIBILITY_MARGIN 20
-void cairo_dock_get_window_position_at_balance (CairoDock *pDock, int iNewWidth, int iNewHeight, int *iNewPositionX, int *iNewPositionY)
-{
- int iWindowPositionX = (g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - iNewWidth) * pDock->fAlign + pDock->iGapX;
- if (pDock->iRefCount == 0 && pDock->fAlign != .5)
- iWindowPositionX += (.5 - pDock->fAlign) * (pDock->iMaxDockWidth - iNewWidth);
- int iWindowPositionY = (pDock->container.bDirectionUp ? g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] - iNewHeight - pDock->iGapY : pDock->iGapY);
- //g_print ("pDock->iGapX : %d => iWindowPositionX <- %d\n", pDock->iGapX, iWindowPositionX);
- //g_print ("iNewHeight : %d -> pDock->container.iWindowPositionY <- %d\n", iNewHeight, iWindowPositionY);
-
- if (pDock->iRefCount == 0)
- {
- if (iWindowPositionX + iNewWidth < CD_VISIBILITY_MARGIN)
- iWindowPositionX = CD_VISIBILITY_MARGIN - iNewWidth;
- else if (iWindowPositionX > g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - CD_VISIBILITY_MARGIN)
- iWindowPositionX = g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - CD_VISIBILITY_MARGIN;
- }
- else
- {
- if (iWindowPositionX < - pDock->iLeftMargin)
- iWindowPositionX = - pDock->iLeftMargin;
- else if (iWindowPositionX > g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - iNewWidth + pDock->iMinRightMargin)
- iWindowPositionX = g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - iNewWidth + pDock->iMinRightMargin;
- }
- if (iWindowPositionY < - pDock->iMaxIconHeight)
- iWindowPositionY = - pDock->iMaxIconHeight;
- else if (iWindowPositionY > g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] - iNewHeight + pDock->iMaxIconHeight)
- iWindowPositionY = g_desktopGeometry.iScreenHeight[pDock->container.bIsHorizontal] - iNewHeight + pDock->iMaxIconHeight;
-
- if (pDock->container.bIsHorizontal)
- {
- *iNewPositionX = iWindowPositionX + pDock->iScreenOffsetX;
- *iNewPositionY = iWindowPositionY + pDock->iScreenOffsetY;
- }
- else
- {
- *iNewPositionX = iWindowPositionX + pDock->iScreenOffsetY;
- *iNewPositionY = iWindowPositionY + pDock->iScreenOffsetX;
- }
- //g_print ("POSITION : %d+%d ; %d+%d\n", iWindowPositionX, pDock->iScreenOffsetX, iWindowPositionY, pDock->iScreenOffsetY);
-}
-
-static gboolean _move_resize_dock (CairoDock *pDock)
-{
- int iNewWidth = pDock->iMaxDockWidth;
- int iNewHeight = pDock->iMaxDockHeight;
- int iNewPositionX, iNewPositionY;
- cairo_dock_get_window_position_at_balance (pDock, iNewWidth, iNewHeight, &iNewPositionX, &iNewPositionY); // on ne peut pas intercepter le cas ou les nouvelles dimensions sont egales aux dimensions courantes de la fenetre, car il se peut qu'il y'ait 2 redimensionnements d'affilee s'annulant mutuellement (remove + insert d'une icone). Il faut donc avoir les 2 configure, sinon la taille reste bloquee aux valeurs fournies par le 1er configure.
-
- //g_print (" -> %dx%d, %d;%d\n", iNewWidth, iNewHeight, iNewPositionX, iNewPositionY);
-
- if (pDock->container.bIsHorizontal)
- {
- gdk_window_move_resize (pDock->container.pWidget->window,
- iNewPositionX,
- iNewPositionY,
- iNewWidth,
- iNewHeight); // lorsqu'on a 2 gdk_window_move_resize d'affilee, Compiz deconne et bloque le dock (il est toujours actif mais n'est plus redessine). Compiz envoit un configure de trop par rapport a Metacity.
- }
- else
- {
- gdk_window_move_resize (pDock->container.pWidget->window,
- iNewPositionY,
- iNewPositionX,
- iNewHeight,
- iNewWidth);
- }
- pDock->iSidMoveResize = 0;
- return FALSE;
-}
-
-void cairo_dock_move_resize_dock (CairoDock *pDock)
-{
- //g_print ("*********%s (current : %dx%d, %d;%d)\n", __func__, pDock->container.iWidth, pDock->container.iHeight, pDock->container.iWindowPositionX, pDock->container.iWindowPositionY);
- if (pDock->iSidMoveResize == 0)
- {
- pDock->iSidMoveResize = g_idle_add ((GSourceFunc)_move_resize_dock, pDock);
- }
- return ;
-}
-
-
- ///////////////////
- /// INPUT SHAPE ///
-///////////////////
-
-static GdkBitmap *_cairo_dock_create_input_shape (CairoDock *pDock, int w, int h)
-{
- int W = pDock->iMaxDockWidth;
- int H = pDock->iMaxDockHeight;
- //g_print ("%s (%dx%d / %dx%d)\n", __func__, w, h, W, H);
-
- GdkBitmap *pShapeBitmap = (GdkBitmap*) gdk_pixmap_new (NULL,
- pDock->container.bIsHorizontal ? W : H,
- pDock->container.bIsHorizontal ? H : W,
- 1);
-
- cairo_t *pCairoContext = gdk_cairo_create (pShapeBitmap);
- cairo_set_source_rgba (pCairoContext, 0.0f, 0.0f, 0.0f, 0.0f);
- cairo_set_operator (pCairoContext, CAIRO_OPERATOR_SOURCE);
- cairo_paint (pCairoContext);
- if (w != 0 && h != 0)
- {
- if (pDock->container.bIsHorizontal)
- {
- cairo_rectangle (pCairoContext,
- (W - w) / 2, // centre en x.
- pDock->container.bDirectionUp ? H - h : 0,
- w,
- h);
- }
- else
- {
- cairo_rectangle (pCairoContext,
- pDock->container.bDirectionUp ? H - h : 0,
- (W - w) / 2, // centre en x.
- h,
- w);
- }
- cairo_set_source_rgba (pCairoContext, 1., 1., 1., 1.);
- cairo_fill (pCairoContext);
- }
- cairo_destroy (pCairoContext);
-
- return pShapeBitmap;
-}
-
-void cairo_dock_update_input_shape (CairoDock *pDock)
-{
- //\_______________ On detruit les zones d'input actuelles.
- if (pDock->pShapeBitmap != NULL)
- {
- g_object_unref ((gpointer) pDock->pShapeBitmap);
- pDock->pShapeBitmap = NULL;
- }
- if (pDock->pHiddenShapeBitmap != NULL)
- {
- g_object_unref ((gpointer) pDock->pHiddenShapeBitmap);
- pDock->pHiddenShapeBitmap = NULL;
- }
-
- //\_______________ on definit les tailles des zones.
- int W = pDock->iMaxDockWidth;
- int H = pDock->iMaxDockHeight;
- int w = pDock->iMinDockWidth;
- int h = pDock->iMinDockHeight;
- ///int w_ = MIN (myDocksParam.iVisibleZoneWidth, pDock->iMaxDockWidth);
- ///int h_ = MIN (myDocksParam.iVisibleZoneHeight, pDock->iMaxDockHeight);
- int w_ = 1;
- int h_ = 1;
-
- //\_______________ on verifie que les conditions sont toujours remplies.
- if (w == 0 || h == 0 || pDock->iRefCount > 0 || W == 0 || H == 0)
- {
- if (pDock->iInputState != CAIRO_DOCK_INPUT_ACTIVE)
- {
- //g_print ("+++ input shape active on update input shape\n");
- cairo_dock_set_input_shape_active (pDock);
- pDock->iInputState = CAIRO_DOCK_INPUT_ACTIVE;
- }
- return ;
- }
-
- //\_______________ on cree les zones.
- pDock->pShapeBitmap = _cairo_dock_create_input_shape (pDock, w, h);
-
- pDock->pHiddenShapeBitmap = _cairo_dock_create_input_shape (pDock, w_, h_);
-}
-
-
-
- ///////////////////
- /// LINEAR DOCK ///
-///////////////////
-
-GList *cairo_dock_calculate_icons_positions_at_rest_linear (GList *pIconList, double fFlatDockWidth, int iXOffset)
-{
- //g_print ("%s (%d, +%d)\n", __func__, fFlatDockWidth, iXOffset);
- double x_cumulated = iXOffset;
- double fXMin = 99999;
- GList* ic, *pFirstDrawnElement = NULL;
- Icon *icon;
- for (ic = pIconList; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
-
- if (x_cumulated + icon->fWidth / 2 < 0)
- icon->fXAtRest = x_cumulated + fFlatDockWidth;
- else if (x_cumulated + icon->fWidth / 2 > fFlatDockWidth)
- icon->fXAtRest = x_cumulated - fFlatDockWidth;
- else
- icon->fXAtRest = x_cumulated;
-
- if (icon->fXAtRest < fXMin)
- {
- fXMin = icon->fXAtRest;
- pFirstDrawnElement = ic;
- }
- //g_print ("%s : fXAtRest = %.2f\n", icon->cName, icon->fXAtRest);
-
- x_cumulated += icon->fWidth + myIconsParam.iIconGap;
- }
-
- return pFirstDrawnElement;
-}
-
-double cairo_dock_calculate_max_dock_width (CairoDock *pDock, GList *pFirstDrawnElementGiven, double fFlatDockWidth, double fWidthConstraintFactor, double fExtraWidth)
-{
- double fMaxDockWidth = 0.;
- //g_print ("%s (%d)\n", __func__, (int)fFlatDockWidth);
- GList *pIconList = pDock->icons;
- if (pIconList == NULL)
- return 2 * myDocksParam.iDockRadius + myDocksParam.iDockLineWidth + 2 * myDocksParam.iFrameMargin;
-
- //\_______________ On remet a zero les positions extremales des icones.
- GList* ic;
- Icon *icon;
- for (ic = pIconList; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- icon->fXMax = -1e4;
- icon->fXMin = 1e4;
- }
-
- //\_______________ On simule le passage du curseur sur toute la largeur du dock, et on chope la largeur maximale qui s'en degage, ainsi que les positions d'equilibre de chaque icone.
- GList *pFirstDrawnElement = (pFirstDrawnElementGiven != NULL ? pFirstDrawnElementGiven : pIconList);
- //for (int iVirtualMouseX = 0; iVirtualMouseX < fFlatDockWidth; iVirtualMouseX ++)
- GList *ic2;
- for (ic = pIconList; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
-
- cairo_dock_calculate_wave_with_position_linear (pIconList, pFirstDrawnElement, icon->fXAtRest, pDock->fMagnitudeMax, fFlatDockWidth, 0, 0, 0.5, 0, pDock->container.bDirectionUp);
- ic2 = pFirstDrawnElement;
- do
- {
- icon = ic2->data;
-
- if (icon->fX + icon->fWidth * icon->fScale > icon->fXMax)
- icon->fXMax = icon->fX + icon->fWidth * icon->fScale;
- if (icon->fX < icon->fXMin)
- icon->fXMin = icon->fX;
-
- ic2 = cairo_dock_get_next_element (ic2, pDock->icons);
- } while (ic2 != pFirstDrawnElement);
- }
- cairo_dock_calculate_wave_with_position_linear (pIconList, pFirstDrawnElement, fFlatDockWidth - 1, pDock->fMagnitudeMax, fFlatDockWidth, 0, 0, pDock->fAlign, 0, pDock->container.bDirectionUp); // pDock->fFoldingFactor
- ic = pFirstDrawnElement;
- do
- {
- icon = ic->data;
-
- if (icon->fX + icon->fWidth * icon->fScale > icon->fXMax)
- icon->fXMax = icon->fX + icon->fWidth * icon->fScale;
- if (icon->fX < icon->fXMin)
- icon->fXMin = icon->fX;
-
- ic = cairo_dock_get_next_element (ic, pDock->icons);
- } while (ic != pFirstDrawnElement);
-
- fMaxDockWidth = (icon->fXMax - ((Icon *) pFirstDrawnElement->data)->fXMin) * fWidthConstraintFactor + fExtraWidth;
- fMaxDockWidth = ceil (fMaxDockWidth) + 1;
-
- for (ic = pIconList; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- icon->fXMin += fMaxDockWidth / 2;
- icon->fXMax += fMaxDockWidth / 2;
- //g_print ("%s : [%d;%d]\n", icon->cName, (int) icon->fXMin, (int) icon->fXMax);
- icon->fX = icon->fXAtRest;
- icon->fScale = 1;
- }
-
- return fMaxDockWidth;
-}
-
-Icon * cairo_dock_calculate_wave_with_position_linear (GList *pIconList, GList *pFirstDrawnElementGiven, int x_abs, gdouble fMagnitude, double fFlatDockWidth, int iWidth, int iHeight, double fAlign, double fFoldingFactor, gboolean bDirectionUp)
-{
- //g_print (">>>>>%s (%d/%.2f, %dx%d, %.2f, %.2f)\n", __func__, x_abs, fFlatDockWidth, iWidth, iHeight, fAlign, fFoldingFactor);
- if (pIconList == NULL)
- return NULL;
- if (x_abs < 0 && iWidth > 0) // ces cas limite sont la pour empecher les icones de retrecir trop rapidement quand on sort par les cotes.
- ///x_abs = -1;
- x_abs = 0;
- else if (x_abs > fFlatDockWidth && iWidth > 0)
- ///x_abs = fFlatDockWidth+1;
- x_abs = (int) fFlatDockWidth;
-
-
- float x_cumulated = 0, fXMiddle, fDeltaExtremum;
- GList* ic, *pointed_ic;
- Icon *icon, *prev_icon;
-
- double fScale = 0.;
- double offset = 0.;
- GList *pFirstDrawnElement = (pFirstDrawnElementGiven != NULL ? pFirstDrawnElementGiven : pIconList);
- ic = pFirstDrawnElement;
- pointed_ic = (x_abs < 0 ? ic : NULL);
- do
- {
- icon = ic->data;
- x_cumulated = icon->fXAtRest;
- fXMiddle = icon->fXAtRest + icon->fWidth / 2;
-
- //\_______________ On calcule sa phase (pi/2 au niveau du curseur).
- icon->fPhase = (fXMiddle - x_abs) / myIconsParam.iSinusoidWidth * G_PI + G_PI / 2;
- if (icon->fPhase < 0)
- {
- icon->fPhase = 0;
- }
- else if (icon->fPhase > G_PI)
- {
- icon->fPhase = G_PI;
- }
-
- //\_______________ On en deduit l'amplitude de la sinusoide au niveau de cette icone, et donc son echelle.
- icon->fScale = 1 + fMagnitude * myIconsParam.fAmplitude * sin (icon->fPhase);
- if (iWidth > 0 && icon->fInsertRemoveFactor != 0)
- {
- fScale = icon->fScale;
- ///offset += (icon->fWidth * icon->fScale) * (pointed_ic == NULL ? 1 : -1);
- if (icon->fInsertRemoveFactor > 0)
- icon->fScale *= icon->fInsertRemoveFactor;
- else
- icon->fScale *= (1 + icon->fInsertRemoveFactor);
- ///offset -= (icon->fWidth * icon->fScale) * (pointed_ic == NULL ? 1 : -1);
- }
-
- icon->fY = (bDirectionUp ? iHeight - myDocksParam.iDockLineWidth - myDocksParam.iFrameMargin - icon->fScale * icon->fHeight : myDocksParam.iDockLineWidth + myDocksParam.iFrameMargin);
- //g_print ("%s fY : %d; %.2f\n", icon->cName, iHeight, icon->fHeight);
-
- //\_______________ Si on avait deja defini l'icone pointee, on peut placer l'icone courante par rapport a la precedente.
- if (pointed_ic != NULL)
- {
- if (ic == pFirstDrawnElement) // peut arriver si on est en dehors a gauche du dock.
- {
- icon->fX = x_cumulated - 1. * (fFlatDockWidth - iWidth) / 2;
- //g_print (" en dehors a gauche : icon->fX = %.2f (%.2f)\n", icon->fX, x_cumulated);
- }
- else
- {
- prev_icon = (ic->prev != NULL ? ic->prev->data : cairo_dock_get_last_icon (pIconList));
- icon->fX = prev_icon->fX + (prev_icon->fWidth + myIconsParam.iIconGap) * prev_icon->fScale;
-
- if (icon->fX + icon->fWidth * icon->fScale > icon->fXMax - myIconsParam.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIconsParam.iIconGap) / 8 && iWidth != 0)
- {
- //g_print (" on contraint %s (fXMax=%.2f , fX=%.2f\n", prev_icon->cName, prev_icon->fXMax, prev_icon->fX);
- fDeltaExtremum = icon->fX + icon->fWidth * icon->fScale - (icon->fXMax - myIconsParam.fAmplitude * fMagnitude * (icon->fWidth + 1.5*myIconsParam.iIconGap) / 16);
- if (myIconsParam.fAmplitude != 0)
- icon->fX -= fDeltaExtremum * (1 - (icon->fScale - 1) / myIconsParam.fAmplitude) * fMagnitude;
- }
- }
- icon->fX = fAlign * iWidth + (icon->fX - fAlign * iWidth) * (1. - fFoldingFactor);
- //g_print (" a droite : icon->fX = %.2f (%.2f)\n", icon->fX, x_cumulated);
- }
-
- //\_______________ On regarde si on pointe sur cette icone.
- if (x_cumulated + icon->fWidth + .5*myIconsParam.iIconGap >= x_abs && x_cumulated - .5*myIconsParam.iIconGap <= x_abs && pointed_ic == NULL) // on a trouve l'icone sur laquelle on pointe.
- {
- pointed_ic = ic;
- ///icon->bPointed = TRUE;
- icon->bPointed = (x_abs != (int) fFlatDockWidth && x_abs != 0);
- icon->fX = x_cumulated - (fFlatDockWidth - iWidth) / 2 + (1 - icon->fScale) * (x_abs - x_cumulated + .5*myIconsParam.iIconGap);
- icon->fX = fAlign * iWidth + (icon->fX - fAlign * iWidth) * (1. - fFoldingFactor);
- //g_print (" icone pointee : fX = %.2f (%.2f, %d)\n", icon->fX, x_cumulated, icon->bPointed);
- }
- else
- icon->bPointed = FALSE;
-
- if (iWidth > 0 && icon->fInsertRemoveFactor != 0)
- {
- if (pointed_ic != ic) // bPointed peut etre false a l'extremite droite.
- offset += (icon->fWidth * (fScale - icon->fScale)) * (pointed_ic == NULL ? 1 : -1);
- else
- offset += (2*(fXMiddle - x_abs) * (fScale - icon->fScale)) * (pointed_ic == NULL ? 1 : -1);
- }
-
- ic = cairo_dock_get_next_element (ic, pIconList);
- } while (ic != pFirstDrawnElement);
-
- //\_______________ On place les icones precedant l'icone pointee par rapport a celle-ci.
- if (pointed_ic == NULL) // on est a droite des icones.
- {
- pointed_ic = (pFirstDrawnElement->prev == NULL ? g_list_last (pIconList) : pFirstDrawnElement->prev);
- icon = pointed_ic->data;
- icon->fX = x_cumulated - (fFlatDockWidth - iWidth) / 2 + (1 - icon->fScale) * (icon->fWidth + .5*myIconsParam.iIconGap);
- icon->fX = fAlign * iWidth + (icon->fX - fAlign * iWidth) * (1 - fFoldingFactor);
- //g_print (" en dehors a droite : icon->fX = %.2f (%.2f)\n", icon->fX, x_cumulated);
- }
-
- ic = pointed_ic;
- while (ic != pFirstDrawnElement)
- {
- icon = ic->data;
-
- ic = ic->prev;
- if (ic == NULL)
- ic = g_list_last (pIconList);
-
- prev_icon = ic->data;
-
- prev_icon->fX = icon->fX - (prev_icon->fWidth + myIconsParam.iIconGap) * prev_icon->fScale;
- //g_print ("fX <- %.2f; fXMin : %.2f\n", prev_icon->fX, prev_icon->fXMin);
- if (prev_icon->fX < prev_icon->fXMin + myIconsParam.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIconsParam.iIconGap) / 8 && iWidth != 0 && x_abs < iWidth && fMagnitude > 0) /// && prev_icon->fPhase == 0 // on rajoute 'fMagnitude > 0' sinon il y'a un leger "saut" du aux contraintes a gauche de l'icone pointee.
- {
- //g_print (" on contraint %s (fXMin=%.2f , fX=%.2f\n", prev_icon->cName, prev_icon->fXMin, prev_icon->fX);
- fDeltaExtremum = prev_icon->fX - (prev_icon->fXMin + myIconsParam.fAmplitude * fMagnitude * (prev_icon->fWidth + 1.5*myIconsParam.iIconGap) / 16);
- if (myIconsParam.fAmplitude != 0)
- prev_icon->fX -= fDeltaExtremum * (1 - (prev_icon->fScale - 1) / myIconsParam.fAmplitude) * fMagnitude;
- }
- prev_icon->fX = fAlign * iWidth + (prev_icon->fX - fAlign * iWidth) * (1. - fFoldingFactor);
- //g_print (" prev_icon->fX : %.2f\n", prev_icon->fX);
- }
-
- if (offset != 0)
- {
- offset /= 2;
- //g_print ("offset : %.2f (pointed:%s)\n", offset, pointed_ic?((Icon*)pointed_ic->data)->cName:"none");
- for (ic = pIconList; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- //if (ic == pIconList)
- // cd_debug ("fX : %.2f - %.2f\n", icon->fX, offset);
- icon->fX -= offset;
- }
- }
-
- icon = pointed_ic->data;
- return (icon->bPointed ? icon : NULL);
-}
-
-Icon *cairo_dock_apply_wave_effect_linear (CairoDock *pDock)
-{
- //\_______________ On calcule la position du curseur dans le referentiel du dock a plat.
- int dx = pDock->container.iMouseX - (pDock->iOffsetForExtend * (pDock->fAlign - .5) * 2) - pDock->container.iWidth / 2; // ecart par rapport au milieu du dock a plat.
- int x_abs = dx + pDock->fFlatDockWidth / 2; // ecart par rapport a la gauche du dock minimal plat.
- //g_print ("%s (flat:%d, w:%d, x:%d)\n", __func__, (int)pDock->fFlatDockWidth, pDock->container.iWidth, pDock->container.iMouseX);
- //\_______________ On calcule l'ensemble des parametres des icones.
- double fMagnitude = cairo_dock_calculate_magnitude (pDock->iMagnitudeIndex) * pDock->fMagnitudeMax;
- Icon *pPointedIcon = cairo_dock_calculate_wave_with_position_linear (pDock->icons, pDock->pFirstDrawnElement, x_abs, fMagnitude, pDock->fFlatDockWidth, pDock->container.iWidth, pDock->container.iHeight, pDock->fAlign, pDock->fFoldingFactor, pDock->container.bDirectionUp); // iMaxDockWidth
- return pPointedIcon;
-}
-
-double cairo_dock_get_current_dock_width_linear (CairoDock *pDock)
-{
- if (pDock->icons == NULL)
- //return 2 * myDocksParam.iDockRadius + myDocksParam.iDockLineWidth + 2 * myDocksParam.iFrameMargin;
- return 1 + 2 * myDocksParam.iFrameMargin;
-
- Icon *pLastIcon = cairo_dock_get_last_drawn_icon (pDock);
- Icon *pFirstIcon = cairo_dock_get_first_drawn_icon (pDock);
- double fWidth = pLastIcon->fX - pFirstIcon->fX + pLastIcon->fWidth * pLastIcon->fScale + 2 * myDocksParam.iFrameMargin; // + 2 * myDocksParam.iDockRadius + myDocksParam.iDockLineWidth + 2 * myDocksParam.iFrameMargin
-
- return fWidth;
-}
-
-
-void cairo_dock_check_if_mouse_inside_linear (CairoDock *pDock)
-{
- CairoDockMousePositionType iMousePositionType;
- int iWidth = pDock->container.iWidth;
- int iHeight = (pDock->fMagnitudeMax != 0 ? pDock->container.iHeight : pDock->iMinDockHeight);
- ///int iExtraHeight = (pDock->bAtBottom ? 0 : myIconsParam.iLabelSize);
- int iExtraHeight = 0; /// il faudrait voir si on a un sous-dock ou un dialogue au dessus :-/
- int iMouseX = pDock->container.iMouseX;
- int iMouseY = (pDock->container.bDirectionUp ? pDock->container.iHeight - pDock->container.iMouseY : pDock->container.iMouseY);
- //g_print ("%s (%dx%d, %dx%d, %f)\n", __func__, iMouseX, iMouseY, iWidth, iHeight, pDock->fFoldingFactor);
-
- //\_______________ On regarde si le curseur est dans le dock ou pas, et on joue sur la taille des icones en consequence.
- int x_abs = pDock->container.iMouseX + (pDock->fFlatDockWidth - iWidth) / 2; // abscisse par rapport a la gauche du dock minimal plat.
- gboolean bMouseInsideDock = (x_abs >= 0 && x_abs <= pDock->fFlatDockWidth && iMouseX > 0 && iMouseX < iWidth);
- //g_print ("bMouseInsideDock : %d (%d;%d/%.2f)\n", bMouseInsideDock, pDock->container.bInside, x_abs, pDock->fFlatDockWidth);
-
- if (! bMouseInsideDock) // hors du dock par les cotes.
- {
- if (/*cairo_dock_is_extended_dock (pDock) && */pDock->bAutoHide) // c'est penible de sortir du dock trop facilement avec l'auto-hide.
- {
- if (iMouseY >= 0 && iMouseY < iHeight)
- iMousePositionType = CAIRO_DOCK_MOUSE_INSIDE;
- else
- iMousePositionType = CAIRO_DOCK_MOUSE_OUTSIDE;
- }
- else
- {
- double fSideMargin = fabs (pDock->fAlign - .5) * (iWidth - pDock->fFlatDockWidth);
- if (x_abs < - fSideMargin || x_abs > pDock->fFlatDockWidth + fSideMargin)
- iMousePositionType = CAIRO_DOCK_MOUSE_OUTSIDE;
- else
- iMousePositionType = CAIRO_DOCK_MOUSE_ON_THE_EDGE;
- }
- }
- else if (iMouseY >= 0 && iMouseY < iHeight) // et en plus on est dedans en y. // && pPointedIcon != NULL
- {
- //g_print ("on est dedans en x et en y (iMouseX=%d => x_abs=%d ; iMouseY=%d/%d)\n", iMouseX, x_abs, iMouseY, iHeight);
- //pDock->container.bInside = TRUE;
- iMousePositionType = CAIRO_DOCK_MOUSE_INSIDE;
- }
- else
- iMousePositionType = CAIRO_DOCK_MOUSE_OUTSIDE;
-
- pDock->iMousePositionType = iMousePositionType;
-}
-
-void cairo_dock_manage_mouse_position (CairoDock *pDock)
-{
- switch (pDock->iMousePositionType)
- {
- case CAIRO_DOCK_MOUSE_INSIDE :
- //g_print ("INSIDE (%d;%d;%d;%d;%d)\n", cairo_dock_entrance_is_allowed (pDock), pDock->iMagnitudeIndex, pDock->bIsGrowingUp, pDock->bIsShrinkingDown, pDock->iInputState);
- if (cairo_dock_entrance_is_allowed (pDock) && ((pDock->iMagnitudeIndex < CAIRO_DOCK_NB_MAX_ITERATIONS && ! pDock->bIsGrowingUp) || pDock->bIsShrinkingDown) && pDock->iInputState != CAIRO_DOCK_INPUT_HIDDEN && (pDock->iInputState != CAIRO_DOCK_INPUT_AT_REST || pDock->bIsDragging)) // on est dedans et la taille des icones est non maximale bien que le dock ne soit pas en train de grossir, cependant on respecte l'etat 'cache', et l'etat repos.
- {
- //g_print ("on est dedans en x et en y et la taille des icones est non maximale bien qu'aucune icone ne soit animee (%d;%d)\n", pDock->iMagnitudeIndex, pDock->container.bInside);
- if (pDock->iRefCount != 0 && !pDock->container.bInside)
- {
-
- break;
- }
- //pDock->container.bInside = TRUE;
- ///if ((pDock->bAtBottom && pDock->iRefCount == 0 && ! pDock->bAutoHide) || (pDock->container.iWidth != pDock->iMaxDockWidth || pDock->container.iHeight != pDock->iMaxDockHeight) || (!pDock->container.bInside)) // on le fait pas avec l'auto-hide, car un signal d'entree est deja emis a cause des mouvements/redimensionnements de la fenetre, et en rajouter un ici fout le boxon. // !pDock->container.bInside ajoute pour le bug du chgt de bureau.
- if ((pDock->iMagnitudeIndex == 0 && pDock->iRefCount == 0 && ! pDock->bAutoHide) || !pDock->container.bInside)
- {
- //g_print (" on emule une re-rentree (pDock->iMagnitudeIndex:%d)\n", pDock->iMagnitudeIndex);
- cairo_dock_emit_enter_signal (CAIRO_CONTAINER (pDock));
- }
- else // on se contente de faire grossir les icones.
- {
- //g_print (" on se contente de faire grossir les icones\n");
- cairo_dock_start_growing (pDock);
- if (pDock->bAutoHide && pDock->iRefCount == 0)
- cairo_dock_start_showing (pDock);
- }
- }
- break ;
-
- case CAIRO_DOCK_MOUSE_ON_THE_EDGE :
- if (pDock->iMagnitudeIndex > 0 && ! pDock->bIsGrowingUp)
- cairo_dock_start_shrinking (pDock);
- break ;
-
- case CAIRO_DOCK_MOUSE_OUTSIDE :
- //g_print ("en dehors du dock (bIsShrinkingDown:%d;bIsGrowingUp:%d;iMagnitudeIndex:%d)\n", pDock->bIsShrinkingDown, pDock->bIsGrowingUp, pDock->iMagnitudeIndex);
- if (! pDock->bIsGrowingUp && ! pDock->bIsShrinkingDown && pDock->iSidLeaveDemand == 0 && pDock->iMagnitudeIndex > 0 && ! pDock->bIconIsFlyingAway)
- {
- if (pDock->iRefCount > 0)
- {
- Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, NULL);
- if (pPointingIcon && pPointingIcon->bPointed) // sous-dock pointe, n le laisse en position haute.
- return;
- }
- //g_print ("on force a quitter (iRefCount:%d; bIsGrowingUp:%d; iMagnitudeIndex:%d)\n", pDock->iRefCount, pDock->bIsGrowingUp, pDock->iMagnitudeIndex);
- pDock->iSidLeaveDemand = g_timeout_add (MAX (myDocksParam.iLeaveSubDockDelay, 330), (GSourceFunc) cairo_dock_emit_leave_signal, (gpointer) pDock);
- }
- break ;
- }
-}
-
-#define make_icon_avoid_mouse(icon) \
- cairo_dock_mark_icon_as_avoiding_mouse (icon);\
- icon->fAlpha = 0.75;\
- if (myIconsParam.fAmplitude != 0)\
- icon->fDrawX += icon->fWidth / 2 * (icon->fScale - 1) / myIconsParam.fAmplitude * (icon->fPhase < G_PI/2 ? -1 : 1);
-
-static gboolean _cairo_dock_check_can_drop_linear (CairoDock *pDock, CairoDockIconGroup iGroup, double fMargin)
-{
- gboolean bCanDrop = FALSE;
- Icon *icon;
- GList *pFirstDrawnElement = (pDock->pFirstDrawnElement != NULL ? pDock->pFirstDrawnElement : pDock->icons);
- GList *ic = pFirstDrawnElement;
- do
- {
- icon = ic->data;
- if (icon->bPointed) // && icon->iAnimationState != CAIRO_DOCK_FOLLOW_MOUSE
- {
- if (pDock->container.iMouseX < icon->fDrawX + icon->fWidth * icon->fScale * fMargin) // on est a gauche. // fDrawXAtRest
- {
- Icon *prev_icon = cairo_dock_get_previous_element (ic, pDock->icons) -> data;
- if ((cairo_dock_get_icon_order (icon) == cairo_dock_get_group_order (iGroup) || cairo_dock_get_icon_order (prev_icon) == cairo_dock_get_group_order (iGroup))) // && prev_icon->iAnimationType != CAIRO_DOCK_FOLLOW_MOUSE
- {
- make_icon_avoid_mouse (icon);
- make_icon_avoid_mouse (prev_icon);
- //g_print ("%s> <%s\n", prev_icon->cName, icon->cName);
- bCanDrop = TRUE;
- }
- }
- else if (pDock->container.iMouseX > icon->fDrawX + icon->fWidth * icon->fScale * (1 - fMargin)) // on est a droite. // fDrawXAtRest
- {
- Icon *next_icon = cairo_dock_get_next_element (ic, pDock->icons) -> data;
- if ((icon->iGroup == iGroup || next_icon->iGroup == iGroup)) // && next_icon->iAnimationType != CAIRO_DOCK_FOLLOW_MOUSE
- {
- make_icon_avoid_mouse (icon);
- make_icon_avoid_mouse (next_icon);
- //g_print ("%s> <%s\n", icon->cName, next_icon->cName);
- bCanDrop = TRUE;
- }
- ic = cairo_dock_get_next_element (ic, pDock->icons); // on la saute.
- if (ic == pFirstDrawnElement)
- break ;
- } // else on est dessus.
- }
- else
- cairo_dock_stop_marking_icon_as_avoiding_mouse (icon);
-
- ic = cairo_dock_get_next_element (ic, pDock->icons);
- } while (ic != pFirstDrawnElement);
-
- return bCanDrop;
-}
-
-
-void cairo_dock_check_can_drop_linear (CairoDock *pDock)
-{
- if (pDock->icons == NULL)
- return;
-
- if (pDock->bIsDragging)
- pDock->bCanDrop = _cairo_dock_check_can_drop_linear (pDock, pDock->iAvoidingMouseIconType, pDock->fAvoidingMouseMargin);
- else
- pDock->bCanDrop = FALSE;
-}
-
-void cairo_dock_stop_marking_icons (CairoDock *pDock)
-{
- if (pDock->icons == NULL)
- return;
- //g_print ("%s (%d)\n", __func__, iType);
-
- Icon *icon;
- GList *ic;
- for (ic = pDock->icons; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- cairo_dock_stop_marking_icon_as_avoiding_mouse (icon);
- }
-}
-
-
-void cairo_dock_set_subdock_position_linear (Icon *pPointedIcon, CairoDock *pDock)
-{
- CairoDock *pSubDock = pPointedIcon->pSubDock;
- int iX = pPointedIcon->fXAtRest - (pDock->fFlatDockWidth - pDock->iMaxDockWidth) / 2 + pPointedIcon->fWidth / 2 + (pDock->iOffsetForExtend * (pDock->fAlign - .5) * 2);
- if (pSubDock->container.bIsHorizontal == pDock->container.bIsHorizontal)
- {
- pSubDock->fAlign = 0.5;
- pSubDock->iGapX = iX + pDock->container.iWindowPositionX - (pDock->container.bIsHorizontal ? pDock->iScreenOffsetX : pDock->iScreenOffsetY) - g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] / 2; // ici les sous-dock ont un alignement egal a 0.5
- pSubDock->iGapY = pDock->iGapY + pDock->iMaxDockHeight;
- }
- else
- {
- pSubDock->fAlign = (pDock->container.bDirectionUp ? 1 : 0);
- pSubDock->iGapX = (pDock->iGapY + pDock->iMaxDockHeight) * (pDock->container.bDirectionUp ? -1 : 1);
- if (pDock->container.bDirectionUp)
- pSubDock->iGapY = g_desktopGeometry.iScreenWidth[pDock->container.bIsHorizontal] - (iX + pDock->container.iWindowPositionX - (pDock->container.bIsHorizontal ? pDock->iScreenOffsetX : pDock->iScreenOffsetY)) - pSubDock->iMaxDockHeight / 2; // les sous-dock ont un alignement egal a 1.
- else
- pSubDock->iGapY = iX + pDock->container.iWindowPositionX - pSubDock->iMaxDockHeight / 2; // les sous-dock ont un alignement egal a 0.
- }
-}
-
-
-GList *cairo_dock_get_first_drawn_element_linear (GList *icons)
-{
- Icon *icon;
- GList *ic;
- GList *pFirstDrawnElement = NULL;
- for (ic = icons; ic != NULL; ic = ic->next)
- {
- icon = ic->data;
- if (icon->bPointed)
- break ;
- }
-
- if (ic == NULL || ic->next == NULL) // derniere icone ou aucune pointee.
- pFirstDrawnElement = icons;
- else
- pFirstDrawnElement = ic->next;
- return pFirstDrawnElement;
-}
-
-
-void cairo_dock_show_subdock (Icon *pPointedIcon, CairoDock *pParentDock)
-{
- cd_debug ("on montre le dock fils");
- CairoDock *pSubDock = pPointedIcon->pSubDock;
- g_return_if_fail (pSubDock != NULL);
-
- if (GTK_WIDGET_VISIBLE (pSubDock->container.pWidget)) // il est deja visible.
- {
- if (pSubDock->bIsShrinkingDown) // il est en cours de diminution, on renverse le processus.
- {
- cairo_dock_start_growing (pSubDock);
- }
- return ;
- }
-
- pSubDock->pRenderer->set_subdock_position (pPointedIcon, pParentDock);
- if (pParentDock->fMagnitudeMax == 0) // son input shape n'est pas la taille max mais iMinDockHeight.
- pSubDock->iGapY -= (pParentDock->container.iHeight - pParentDock->iMinDockHeight);
-
- if (pSubDock->icons != NULL)
- {
- pSubDock->fFoldingFactor = (myDocksParam.bAnimateSubDock ? .99 : 0.);
- cairo_dock_notify_on_object (&myIconsMgr, NOTIFICATION_UNFOLD_SUBDOCK, pPointedIcon);
- cairo_dock_notify_on_object (pPointedIcon, NOTIFICATION_UNFOLD_SUBDOCK, pPointedIcon);
- }
- else
- pSubDock->fFoldingFactor = 0.;
-
- int iNewWidth = pSubDock->iMaxDockWidth;
- int iNewHeight = pSubDock->iMaxDockHeight;
- int iNewPositionX, iNewPositionY;
- cairo_dock_get_window_position_at_balance (pSubDock, iNewWidth, iNewHeight, &iNewPositionX, &iNewPositionY);
-
- gtk_window_present (GTK_WINDOW (pSubDock->container.pWidget));
-
- if (pSubDock->container.bIsHorizontal)
- gdk_window_move_resize (pSubDock->container.pWidget->window,
- iNewPositionX,
- iNewPositionY,
- iNewWidth,
- iNewHeight);
- else
- gdk_window_move_resize (pSubDock->container.pWidget->window,
- iNewPositionY,
- iNewPositionX,
- iNewHeight,
- iNewWidth);
-
- if (pSubDock->fFoldingFactor == 0.)
- {
- cd_debug (" on montre le sous-dock sans animation");
- gtk_widget_queue_draw (pSubDock->container.pWidget);
- }
- else
- {
- cd_debug (" on montre le sous-dock avec animation");
- cairo_dock_start_growing (pSubDock); // on commence a faire grossir les icones.
- pSubDock->pRenderer->calculate_icons (pSubDock); // on recalcule les icones car sinon le 1er dessin se fait avec les parametres tels qu'ils etaient lorsque le dock s'est cache; or l'animation de pliage peut prendre plus de temps que celle de cachage.
- }
- //g_print (" -> Gap %d;%d -> W(%d;%d) (%d)\n", pSubDock->iGapX, pSubDock->iGapY, pSubDock->container.iWindowPositionX, pSubDock->container.iWindowPositionY, pSubDock->container.bIsHorizontal);
-
- ///gtk_window_set_keep_above (GTK_WINDOW (pSubDock->container.pWidget), myDocksParam.bPopUp);
-
- cairo_dock_replace_all_dialogs ();
-}
-
-
-
-static gboolean _redraw_subdock_content_idle (Icon *pIcon)
-{
- cd_debug ("%s()", __func__);
- cd_debug (" %s", pIcon->cName);
- CairoDock *pDock = cairo_dock_search_dock_from_name (pIcon->cParentDockName);
- if (pDock != NULL)
- {
- if (pIcon->pSubDock != NULL)
- {
- cairo_dock_draw_subdock_content_on_icon (pIcon, pDock);
- }
- else // l'icone a pu perdre son sous-dock entre-temps (exemple : une classe d'appli contenant 2 icones, dont on enleve l'une des 2.
- {
- cairo_dock_reload_icon_image (pIcon, CAIRO_CONTAINER (pDock));
- }
- cairo_dock_redraw_icon (pIcon, CAIRO_CONTAINER (pDock));
- }
- pIcon->iSidRedrawSubdockContent = 0;
- return FALSE;
-}
-void cairo_dock_trigger_redraw_subdock_content (CairoDock *pDock)
-{
- Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, NULL);
- if (pPointingIcon != NULL && (pPointingIcon->iSubdockViewType != 0 || (pPointingIcon->cClass != NULL && ! myIndicatorsParam.bUseClassIndic && (CAIRO_DOCK_ICON_TYPE_IS_CLASS_CONTAINER (pPointingIcon) || CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pPointingIcon)))))
- {
- if (pPointingIcon->iSidRedrawSubdockContent != 0) // s'il y'a deja un redessin de prevu, on le passe a la fin de facon a ce qu'il ne se fasse pas avant le redessin de l'icone responsable de ce trigger.
- g_source_remove (pPointingIcon->iSidRedrawSubdockContent);
- pPointingIcon->iSidRedrawSubdockContent = g_idle_add ((GSourceFunc) _redraw_subdock_content_idle, pPointingIcon);
- }
-}
-
-void cairo_dock_trigger_redraw_subdock_content_on_icon (Icon *icon)
-{
- if (icon->iSidRedrawSubdockContent == 0)
- icon->iSidRedrawSubdockContent = g_idle_add ((GSourceFunc) _redraw_subdock_content_idle, icon);
-}
-
-void cairo_dock_redraw_subdock_content (CairoDock *pDock)
-{
- CairoDock *pParentDock = NULL;
- Icon *pPointingIcon = cairo_dock_search_icon_pointing_on_dock (pDock, &pParentDock);
- if (pPointingIcon != NULL && pPointingIcon->iSubdockViewType != 0 && pPointingIcon->iSidRedrawSubdockContent == 0 && pParentDock != NULL)
- {
- cairo_dock_draw_subdock_content_on_icon (pPointingIcon, pParentDock);
- cairo_dock_redraw_icon (pPointingIcon, CAIRO_CONTAINER (pParentDock));
- }
-}
-
-static gboolean _update_WM_icons (CairoDock *pDock)
-{
- cairo_dock_set_icons_geometry_for_window_manager (pDock);
- pDock->iSidUpdateWMIcons = 0;
- return FALSE;
-}
-void cairo_dock_trigger_set_WM_icons_geometry (CairoDock *pDock)
-{
- if (pDock->iSidUpdateWMIcons == 0)
- {
- pDock->iSidUpdateWMIcons = g_idle_add ((GSourceFunc) _update_WM_icons, pDock);
- }
-}
-
-
- ///////////////////////
- /// DOCK BACKGROUND ///
-///////////////////////
-
-static cairo_surface_t *_cairo_dock_make_stripes_background (int iWidth, int iHeight, double *fStripesColorBright, double *fStripesColorDark, int iNbStripes, double fStripesWidth, double fStripesAngle)
-{
- cairo_pattern_t *pStripesPattern;
- double fWidth = iWidth;
- if (fabs (fStripesAngle) != 90)
- pStripesPattern = cairo_pattern_create_linear (0.0f,
- 0.0f,
- iWidth,
- iWidth * tan (fStripesAngle * G_PI/180.));
- else
- pStripesPattern = cairo_pattern_create_linear (0.0f,
- 0.0f,
- 0.,
- (fStripesAngle == 90) ? iHeight : - iHeight);
- g_return_val_if_fail (cairo_pattern_status (pStripesPattern) == CAIRO_STATUS_SUCCESS, NULL);
-
- cairo_pattern_set_extend (pStripesPattern, CAIRO_EXTEND_REPEAT);
-
- if (iNbStripes > 0)
- {
- gdouble fStep;
- int i;
- for (i = 0; i < iNbStripes+1; i ++)
- {
- fStep = (double)i / iNbStripes;
- cairo_pattern_add_color_stop_rgba (pStripesPattern,
- fStep - fStripesWidth / 2.,
- fStripesColorBright[0],
- fStripesColorBright[1],
- fStripesColorBright[2],
- fStripesColorBright[3]);
- cairo_pattern_add_color_stop_rgba (pStripesPattern,
- fStep,
- fStripesColorDark[0],
- fStripesColorDark[1],
- fStripesColorDark[2],
- fStripesColorDark[3]);
- cairo_pattern_add_color_stop_rgba (pStripesPattern,
- fStep + fStripesWidth / 2.,
- fStripesColorBright[0],
- fStripesColorBright[1],
- fStripesColorBright[2],
- fStripesColorBright[3]);
- }
- }
- else
- {
- cairo_pattern_add_color_stop_rgba (pStripesPattern,
- 0.,
- fStripesColorDark[0],
- fStripesColorDark[1],
- fStripesColorDark[2],
- fStripesColorDark[3]);
- cairo_pattern_add_color_stop_rgba (pStripesPattern,
- 1.,
- fStripesColorBright[0],
- fStripesColorBright[1],
- fStripesColorBright[2],
- fStripesColorBright[3]);
- }
-
- cairo_surface_t *pNewSurface = cairo_dock_create_blank_surface (
- iWidth,
- iHeight);
- cairo_t *pImageContext = cairo_create (pNewSurface);
- cairo_set_source (pImageContext, pStripesPattern);
- cairo_paint (pImageContext);
-
- cairo_pattern_destroy (pStripesPattern);
- cairo_destroy (pImageContext);
-
- return pNewSurface;
-}
-static void _cairo_dock_load_default_background (CairoDockImageBuffer *pImage, int iWidth, int iHeight)
-{
- //g_print ("%s (%s, %d)\n", __func__, myDocksParam.cBackgroundImageFile, myDocksParam.bBackgroundImageRepeat);
- if (myDocksParam.cBackgroundImageFile != NULL)
- {
- if (myDocksParam.bBackgroundImageRepeat)
- {
- cairo_surface_t *pBgSurface = cairo_dock_create_surface_from_pattern (myDocksParam.cBackgroundImageFile,
- iWidth,
- iHeight,
- myDocksParam.fBackgroundImageAlpha);
- cairo_dock_load_image_buffer_from_surface (pImage,
- pBgSurface,
- iWidth,
- iHeight);
- }
- else
- {
- cairo_dock_load_image_buffer_full (pImage,
- myDocksParam.cBackgroundImageFile,
- iWidth,
- iHeight,
- CAIRO_DOCK_FILL_SPACE,
- myDocksParam.fBackgroundImageAlpha);
- }
- }
- if (pImage->pSurface == NULL)
- {
- cairo_surface_t *pBgSurface = _cairo_dock_make_stripes_background (
- iWidth,
- iHeight,
- myDocksParam.fStripesColorBright,
- myDocksParam.fStripesColorDark,
- myDocksParam.iNbStripes,
- myDocksParam.fStripesWidth,
- myDocksParam.fStripesAngle);
- cairo_dock_load_image_buffer_from_surface (pImage,
- pBgSurface,
- iWidth,
- iHeight);
- }
-}
-
-void cairo_dock_load_dock_background (CairoDock *pDock)
-{
- cairo_dock_unload_image_buffer (&pDock->backgroundBuffer);
-
- int iWidth = pDock->iDecorationsWidth;
- int iHeight = pDock->iDecorationsHeight;
-
- if (pDock->bGlobalBg || pDock->iRefCount > 0)
- {
- _cairo_dock_load_default_background (&pDock->backgroundBuffer, iWidth, iHeight);
- }
- else if (pDock->cBgImagePath != NULL)
- {
- cairo_dock_load_image_buffer (&pDock->backgroundBuffer, pDock->cBgImagePath, iWidth, iHeight, CAIRO_DOCK_FILL_SPACE);
- }
- if (pDock->backgroundBuffer.pSurface == NULL)
- {
- cairo_surface_t *pSurface = _cairo_dock_make_stripes_background (iWidth, iHeight, pDock->fBgColorBright, pDock->fBgColorDark, 0, 0., 90);
- cairo_dock_load_image_buffer_from_surface (&pDock->backgroundBuffer, pSurface, iWidth, iHeight);
- }
-}
-
-static gboolean _load_background_idle (CairoDock *pDock)
-{
- cairo_dock_load_dock_background (pDock);
-
- pDock->iSidLoadBg = 0;
- return FALSE;
-}
-void cairo_dock_trigger_load_dock_background (CairoDock *pDock)
-{
- if (pDock->iDecorationsWidth == pDock->backgroundBuffer.iWidth && pDock->iDecorationsHeight == pDock->backgroundBuffer.iHeight) // mise a jour inutile.
- return;
- if (pDock->iSidLoadBg == 0)
- pDock->iSidLoadBg = g_idle_add ((GSourceFunc)_load_background_idle, pDock);
-}
=== modified file '.pc/applied-patches'
--- .pc/applied-patches 2011-05-21 21:03:26 +0000
+++ .pc/applied-patches 2011-06-20 15:05:34 +0000
@@ -1,2 +1,1 @@
01-default_theme_with_default_apps
-02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2011-05-21 21:03:26 +0000
+++ CMakeLists.txt 2011-06-20 15:05:34 +0000
@@ -10,7 +10,7 @@
########### project ###############
project ("cairo-dock")
-set (VERSION "2.3.0~2")
+set (VERSION "2.3.0~3")
add_definitions (-std=c99 -Wstrict-prototypes -Wextra -Wwrite-strings -Wuninitialized -Werror-implicit-function-declaration) #-Wunreachable-code -Wno-unused-parameter -Wall
if (NOT ${CMAKE_BUILD_TYPE})
=== modified file 'debian/changelog'
--- debian/changelog 2011-05-21 21:03:26 +0000
+++ debian/changelog 2011-06-20 15:05:34 +0000
@@ -1,3 +1,16 @@
+cairo-dock (2.3.0~3-0ubuntu1) UNRELEASED; urgency=low
+
+ * New upstream release. (LP: #799773)
+ * Upstream ChangeLog:
+ - Fixed a crash that occurs when the MP applet is in desklet
+ mode and applets separated from launchers
+ and the music-player is launched. (LP: #797273)
+ * debian/patches:
+ - Removed 02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch
+ (now in the upstream release)
+
+ -- Matthieu Baerts (matttbe) <matttbe@xxxxxxxxx> Mon, 20 Jun 2011 16:55:12 +0200
+
cairo-dock (2.3.0~2-0ubuntu1) oneiric; urgency=low
* New upstream release. (LP: #786104)
=== modified file 'debian/patches/01-default_theme_with_default_apps'
--- debian/patches/01-default_theme_with_default_apps 2011-03-17 14:08:48 +0000
+++ debian/patches/01-default_theme_with_default_apps 2011-06-20 15:05:34 +0000
@@ -1,7 +1,7 @@
Index: cairo-dock/data/default-theme/launchers/01eog.desktop
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ cairo-dock/data/default-theme/launchers/01eog.desktop 2011-04-19 22:59:04.000000000 +0200
++++ cairo-dock/data/default-theme/launchers/01eog.desktop 2011-06-19 18:02:00.744393000 +0200
@@ -0,0 +1,54 @@
+#!en
+
@@ -60,7 +60,7 @@
Index: cairo-dock/data/default-theme/launchers/01evolution.desktop
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ cairo-dock/data/default-theme/launchers/01evolution.desktop 2011-04-19 22:59:04.000000000 +0200
++++ cairo-dock/data/default-theme/launchers/01evolution.desktop 2011-06-19 18:02:00.744393000 +0200
@@ -0,0 +1,47 @@
+#!en
+
@@ -111,7 +111,7 @@
+X-Ubuntu-Gettext-Domain=evolution-2.32
Index: cairo-dock/data/default-theme/launchers/01f-spot.desktop
===================================================================
---- cairo-dock.orig/data/default-theme/launchers/01f-spot.desktop 2011-04-19 22:58:37.817058474 +0200
+--- cairo-dock.orig/data/default-theme/launchers/01f-spot.desktop 2011-06-19 18:02:00.744393000 +0200
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,53 +0,0 @@
-#!en
@@ -169,7 +169,7 @@
-X-GNOME-DocPath=f-spot/f-spot.xml
Index: cairo-dock/data/default-theme/launchers/01inkscape.desktop
===================================================================
---- cairo-dock.orig/data/default-theme/launchers/01inkscape.desktop 2011-04-19 22:58:37.787058430 +0200
+--- cairo-dock.orig/data/default-theme/launchers/01inkscape.desktop 2011-06-19 18:02:00.744393000 +0200
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,92 +0,0 @@
-#!en
@@ -264,54 +264,10 @@
-MimeType=image/svg+xml;image/svg+xml-compressed;
-TryExec=inkscape
-StartupNotify=true
-Index: cairo-dock/data/default-theme/launchers/CMakeLists.txt
-===================================================================
---- cairo-dock.orig/data/default-theme/launchers/CMakeLists.txt 2011-04-19 22:58:37.707058307 +0200
-+++ cairo-dock/data/default-theme/launchers/CMakeLists.txt 2011-04-19 22:59:04.000000000 +0200
-@@ -8,10 +8,10 @@
- 01gimp.desktop
- 01firefox.desktop
- 01gnome-terminal.desktop
-- 01f-spot.desktop
-- 01inkscape.desktop
-+ 01shotwell.desktop
-+ 01eog.desktop
- 01separator.desktop
-- 01thunderbird.desktop
-+ 01evolution.desktop
- 02separator.desktop
- 03separator.desktop
- DESTINATION ${pkgdatadir}/themes/_default_/launchers)
-Index: cairo-dock/data/default-theme/plug-ins/GMenu/GMenu.conf
-===================================================================
---- cairo-dock.orig/data/default-theme/plug-ins/GMenu/GMenu.conf 2011-04-19 22:58:37.907058606 +0200
-+++ cairo-dock/data/default-theme/plug-ins/GMenu/GMenu.conf 2011-04-19 22:59:04.000000000 +0200
-@@ -17,7 +17,7 @@
-
- #S+ Image filename:
- #{Leave empty to use the default one.}
--icon=alacarte
-+icon=distributor-logo
-
- #j+[0;128] Desired icon size for this applet
- #{Set to 0 to use the default applet size}
-Index: cairo-dock/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf
-===================================================================
---- cairo-dock.orig/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf 2011-04-19 22:58:37.867058541 +0200
-+++ cairo-dock/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf 2011-04-19 22:59:04.000000000 +0200
-@@ -107,7 +107,7 @@
- #F[Audio Player;gtk-cdrom]
- frame_player=
- #L[Amarok 2;Audacious;Banshee;Clementine;Exaile;Exaile 0.3;GMusicBrowser;Guayadeque;Listen;Qmmp;QuodLibet;Rhythmbox;Songbird;XMMS 2;XMMS] Player to control:
--current-player=Rhythmbox
-+current-player=Banshee
-
- #b Steal the player's icon from the taskbar?
- #{This will prevent the player icon appearing in the taskbar. The applet's icon will then behave as a launcher, an application and an applet.}
Index: cairo-dock/data/default-theme/launchers/01shotwell.desktop
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
-+++ cairo-dock/data/default-theme/launchers/01shotwell.desktop 2011-04-19 22:59:04.000000000 +0200
++++ cairo-dock/data/default-theme/launchers/01shotwell.desktop 2011-06-19 18:02:00.744393000 +0200
@@ -0,0 +1,52 @@
+#!en
+
@@ -367,7 +323,7 @@
+X-Ayatana-Appmenu-Show-Stubs=false
Index: cairo-dock/data/default-theme/launchers/01thunderbird.desktop
===================================================================
---- cairo-dock.orig/data/default-theme/launchers/01thunderbird.desktop 2011-04-19 22:58:37.757058386 +0200
+--- cairo-dock.orig/data/default-theme/launchers/01thunderbird.desktop 2011-06-19 18:02:00.744393000 +0200
+++ /dev/null 1970-01-01 00:00:00.000000000 +0000
@@ -1,58 +0,0 @@
-#!en
@@ -428,3 +384,47 @@
-Comment[pl]=Czytanie i wysyÅanie e-maili
-Comment[pt_BR]=Ler e escrever suas mensagens
-Comment[sv]=Läs och skriv e-post
+Index: cairo-dock/data/default-theme/launchers/CMakeLists.txt
+===================================================================
+--- cairo-dock.orig/data/default-theme/launchers/CMakeLists.txt 2011-06-19 18:02:00.744393000 +0200
++++ cairo-dock/data/default-theme/launchers/CMakeLists.txt 2011-06-19 18:02:00.744393000 +0200
+@@ -8,10 +8,10 @@
+ 01gimp.desktop
+ 01firefox.desktop
+ 01gnome-terminal.desktop
+- 01f-spot.desktop
+- 01inkscape.desktop
++ 01shotwell.desktop
++ 01eog.desktop
+ 01separator.desktop
+- 01thunderbird.desktop
++ 01evolution.desktop
+ 02separator.desktop
+ 03separator.desktop
+ DESTINATION ${pkgdatadir}/themes/_default_/launchers)
+Index: cairo-dock/data/default-theme/plug-ins/GMenu/GMenu.conf
+===================================================================
+--- cairo-dock.orig/data/default-theme/plug-ins/GMenu/GMenu.conf 2011-06-19 18:02:00.744393000 +0200
++++ cairo-dock/data/default-theme/plug-ins/GMenu/GMenu.conf 2011-06-19 18:02:00.744393000 +0200
+@@ -17,7 +17,7 @@
+
+ #S+ Image filename:
+ #{Leave empty to use the default one.}
+-icon=alacarte
++icon=distributor-logo
+
+ #j+[0;128] Desired icon size for this applet
+ #{Set to 0 to use the default applet size}
+Index: cairo-dock/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf
+===================================================================
+--- cairo-dock.orig/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf 2011-06-19 18:02:00.744393000 +0200
++++ cairo-dock/data/default-theme/plug-ins/musicPlayer/musicPlayer.conf 2011-06-19 18:02:00.744393000 +0200
+@@ -107,7 +107,7 @@
+ #F[Audio Player;gtk-cdrom]
+ frame_player=
+ #L[Amarok 2;Audacious;Banshee;Clementine;Exaile;Exaile 0.3;GMusicBrowser;Guayadeque;Listen;Qmmp;QuodLibet;Rhythmbox;Songbird;XMMS 2;XMMS] Player to control:
+-current-player=Rhythmbox
++current-player=Banshee
+
+ #b Steal the player's icon from the taskbar?
+ #{This will prevent the player icon appearing in the taskbar. The applet's icon will then behave as a launcher, an application and an applet.}
=== removed file 'debian/patches/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch'
--- debian/patches/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch 2011-05-21 21:03:26 +0000
+++ debian/patches/02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch 1970-01-01 00:00:00 +0000
@@ -1,25 +0,0 @@
-From: Matthieu Baerts <matttbe@xxxxxxxxx>
-Subject: Fixed an annoying bug when we slowly leave the dock with the cursor on the edge of it
-Origin: upstream, http://bazaar.launchpad.net/~cairo-dock-team/cairo-dock-core/2.3.x/revision/757
-Bug: http://www.glx-dock.org/tt_task.php?p=1&t=174
-Forwarded: yes
-
-Index: cairo-dock/src/gldit/cairo-dock-dock-facility.c
-===================================================================
---- cairo-dock.orig/src/gldit/cairo-dock-dock-facility.c 2011-05-21 10:52:15.504630255 +0200
-+++ cairo-dock/src/gldit/cairo-dock-dock-facility.c 2011-05-21 10:52:38.494663981 +0200
-@@ -760,11 +760,10 @@
- }
- else
- {
-- double fSideMargin = fabs (pDock->fAlign - .5) * (iWidth - pDock->fFlatDockWidth);
-- if (x_abs < - fSideMargin || x_abs > pDock->fFlatDockWidth + fSideMargin)
-- iMousePositionType = CAIRO_DOCK_MOUSE_OUTSIDE;
-- else
-+ if (iMouseY >= 0 && iMouseY < iHeight)
- iMousePositionType = CAIRO_DOCK_MOUSE_ON_THE_EDGE;
-+ else
-+ iMousePositionType = CAIRO_DOCK_MOUSE_OUTSIDE;
- }
- }
- else if (iMouseY >= 0 && iMouseY < iHeight) // et en plus on est dedans en y. // && pPointedIcon != NULL
=== modified file 'debian/patches/series'
--- debian/patches/series 2011-05-21 21:03:26 +0000
+++ debian/patches/series 2011-06-20 15:05:34 +0000
@@ -1,2 +1,1 @@
01-default_theme_with_default_apps
-02-mouse-leaves-on-the-edge_upstream-version-2.3.0~2.1.patch
=== modified file 'src/gldit/cairo-dock-class-manager.c'
--- src/gldit/cairo-dock-class-manager.c 2011-03-17 14:08:48 +0000
+++ src/gldit/cairo-dock-class-manager.c 2011-06-20 15:05:34 +0000
@@ -1004,7 +1004,9 @@
if (CAIRO_DOCK_ICON_TYPE_IS_APPLET (pInhibitorIcon) && myIconsParam.iSeparateIcons)
continue;
pDock = cairo_dock_search_dock_from_name (pInhibitorIcon->cParentDockName);
- if (!pDock || !pDock->bIsMainDock)
+ if (!pDock) // not inside a dock, for instance a desklet; no interest for us here.
+ continue;
+ if (pDock->iRefCount != 0) // inside a sub-dock, take the pointing icon inside the main dock.
pInhibitorIcon = cairo_dock_search_icon_pointing_on_dock (pDock, NULL);
pSameClassIcon = pInhibitorIcon;
if (CAIRO_DOCK_ICON_TYPE_IS_LAUNCHER (pSameClassIcon)) // on prend les lanceurs de preference.
=== modified file 'src/gldit/cairo-dock-dock-manager.c'
--- src/gldit/cairo-dock-dock-manager.c 2011-05-20 23:13:48 +0000
+++ src/gldit/cairo-dock-dock-manager.c 2011-06-20 15:05:34 +0000
@@ -372,7 +372,7 @@
}
Icon *cairo_dock_search_icon_pointing_on_dock (CairoDock *pDock, CairoDock **pParentDock) // pParentDock peut etre NULL.
{
- if (pDock->bIsMainDock) // par definition. On n'utilise pas iRefCount, car si on est en train de detruire un dock, sa reference est deja decrementee. C'est dommage mais c'est comme ca.
+ if (pDock == NULL || pDock->bIsMainDock) // par definition. On n'utilise pas iRefCount, car si on est en train de detruire un dock, sa reference est deja decrementee. C'est dommage mais c'est comme ca.
return NULL;
Icon *pPointingIcon = NULL;
gpointer data[3] = {pDock, &pPointingIcon, pParentDock};
Follow ups