~ubuntu-branches/ubuntu/utopic/cairo-dock/utopic

« back to all changes in this revision

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

  • Committer: Matthieu Baerts
  • Date: 2014-02-19 22:56:20 UTC
  • mfrom: (1.1.38)
  • Revision ID: matttbe@gmail.com-20140219225620-5j86v0ccfmngbwdm
Tags: 3.3.99.beta1.1~20140219~bzr1717-0ubuntu1
* New upstream snapshot.
* Short Upstream ChangeLog:
  - Style: unified the style for all objects.
  - Menu: added the possibility to customise them
  - Config: updated some sections linked to the style
  - API:
    - Updated functions about the style
    - Added new features about PID monitoring
  - Some bugs have been fixed, other tweaks
* debian/control:
  - bumped plug-ins versions
  - bumped Standard Version (no change needed)

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include "cairo-dock-draw-opengl.h"
27
27
#include "cairo-dock-config.h"
28
28
#include "cairo-dock-log.h"
 
29
#include "cairo-dock-keyfile-utilities.h"  // cairo_dock_open_key_file
29
30
#include "cairo-dock-desklet-factory.h"
30
31
#include "cairo-dock-desklet-manager.h"
31
32
#include "cairo-dock-dock-manager.h"  // myDockObjectMgr
35
36
#include "cairo-dock-animations.h"  // for cairo_dock_is_hidden
36
37
#include "cairo-dock-desktop-manager.h"
37
38
#include "cairo-dock-dialog-factory.h"
 
39
#include "cairo-dock-style-manager.h"
38
40
#define _MANAGER_DEF_
39
41
#include "cairo-dock-dialog-manager.h"
40
42
 
47
49
extern CairoDock *g_pMainDock;
48
50
extern gboolean g_bUseOpenGL;
49
51
extern CairoDockHidingEffect *g_pHidingBackend;  // cairo_dock_is_hidden
 
52
extern gchar *g_cCurrentThemePath;
50
53
 
51
54
// private
52
55
static GSList *s_pDialogList = NULL;
293
296
        double x, y;
294
297
        if (pDialog->iIconTexture != 0)
295
298
        {
296
 
                x = pDialog->iLeftMargin;
 
299
                x = pDialog->iLeftMargin;  /// TODO: use iconoffset here, and add a padding for placement only...
297
300
                y = (pDialog->container.bDirectionUp ? pDialog->iTopMargin : pDialog->container.iHeight - (pDialog->iTopMargin + pDialog->iBubbleHeight));
298
301
                
299
302
                glBindTexture (GL_TEXTURE_2D, pDialog->iIconTexture);
499
502
        if (iLimitXRight - iLimitXLeft >= MIN (gldi_desktop_get_width(), iWidth) || !bDialogOnOurWay)  // there is enough room to place the dialog.
500
503
        {
501
504
                if (pDialog->bRight)
502
 
                        pDialog->iComputedPositionX = MAX (0, MIN (pDialog->iAimedX - pDialog->fAlign * iWidth, iLimitXRight - iWidth));
 
505
                        pDialog->iComputedPositionX = MAX (0, MIN (pDialog->iAimedX - pDialog->fAlign * (iWidth - pDialog->iIconOffsetX) - pDialog->iIconOffsetX, iLimitXRight - iWidth));
503
506
                else
504
 
                        pDialog->iComputedPositionX = MIN (gldi_desktop_get_width() - iWidth, MAX (pDialog->iAimedX - (1. - pDialog->fAlign) * iWidth, iLimitXLeft));
 
507
                        pDialog->iComputedPositionX = MIN (gldi_desktop_get_width() - iWidth, MAX (pDialog->iAimedX - (1. - pDialog->fAlign) * (iWidth - pDialog->iIconOffsetX) - pDialog->iIconOffsetX, iLimitXLeft));
505
508
                if (pDialog->container.bDirectionUp && pDialog->iComputedPositionY < 0)
506
509
                        pDialog->iComputedPositionY = 0;
507
510
                else if (!pDialog->container.bDirectionUp && pDialog->iComputedPositionY + iHeight > gldi_desktop_get_height())
861
864
        
862
865
        pDialogs->cButtonOkImage = cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "button_ok image", &bFlushConfFileNeeded, NULL, NULL, NULL);
863
866
        pDialogs->cButtonCancelImage = cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "button_cancel image", &bFlushConfFileNeeded, NULL, NULL, NULL);
864
 
 
 
867
        
865
868
        cairo_dock_get_size_key_value_helper (pKeyFile, "Dialogs", "button ", bFlushConfFileNeeded, pDialogs->iDialogButtonWidth, pDialogs->iDialogButtonHeight);
866
 
 
 
869
        
867
870
        double couleur_bulle[4] = {1.0, 1.0, 1.0, 0.7};
868
 
        cairo_dock_get_double_list_key_value (pKeyFile, "Dialogs", "background color", &bFlushConfFileNeeded, pDialogs->fDialogColor, 4, couleur_bulle, NULL, NULL);
 
871
        cairo_dock_get_double_list_key_value (pKeyFile, "Dialogs", "bg color", &bFlushConfFileNeeded, pDialogs->fBgColor, 4, couleur_bulle, NULL, "background color");
869
872
        pDialogs->iDialogIconSize = MAX (16, cairo_dock_get_integer_key_value (pKeyFile, "Dialogs", "icon size", &bFlushConfFileNeeded, 48, NULL, NULL));
870
873
        
 
874
        pDialogs->cDecoratorName = cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "decorator", &bFlushConfFileNeeded, "comics", NULL, NULL);
 
875
        
 
876
        if (! g_key_file_has_key (pKeyFile, "Dialogs", "line color", NULL))  // old params (< 3.4)
 
877
        {
 
878
                // get the old params from the Dialog module's config
 
879
                gchar *cRenderingConfFile = g_strdup_printf ("%s/plug-ins/dialog-rendering/dialog-rendering.conf", g_cCurrentThemePath);
 
880
                GKeyFile *keyfile = cairo_dock_open_key_file (cRenderingConfFile);
 
881
                g_free (cRenderingConfFile);
 
882
                
 
883
                gchar *cRenderer = g_strdup (pDialogs->cDecoratorName);
 
884
                if (cRenderer)
 
885
                {
 
886
                        cRenderer[0] = g_ascii_toupper (cRenderer[0]);
 
887
                        
 
888
                        cairo_dock_get_double_list_key_value (keyfile, cRenderer, "line color", &bFlushConfFileNeeded, pDialogs->fLineColor, 4, NULL, NULL, NULL);
 
889
                        g_key_file_set_double_list (pKeyFile, "Dialogs", "line color", pDialogs->fLineColor, 4);
 
890
                        
 
891
                        pDialogs->iLineWidth = g_key_file_get_integer (keyfile, cRenderer, "border", NULL);
 
892
                        g_key_file_set_integer (pKeyFile, "Dialogs", "linewidth", pDialogs->iLineWidth);
 
893
                        
 
894
                        pDialogs->iCornerRadius = g_key_file_get_integer (keyfile, cRenderer, "corner", NULL);
 
895
                        g_key_file_set_integer (pKeyFile, "Dialogs", "corner", pDialogs->iCornerRadius);
 
896
                        
 
897
                        g_free (cRenderer);
 
898
                }
 
899
                g_key_file_free (keyfile);
 
900
                
 
901
                bFlushConfFileNeeded = TRUE;
 
902
        }
 
903
        else
 
904
        {
 
905
                pDialogs->iCornerRadius = g_key_file_get_integer (pKeyFile, "Dialogs", "corner", NULL);
 
906
                pDialogs->iLineWidth = g_key_file_get_integer (pKeyFile, "Dialogs", "linewidth", NULL);
 
907
                cairo_dock_get_double_list_key_value (pKeyFile, "Dialogs", "line color", &bFlushConfFileNeeded, pDialogs->fLineColor, 4, NULL, NULL, NULL);
 
908
        }
 
909
        
 
910
        pDialogs->bUseDefaultColors = (cairo_dock_get_integer_key_value (pKeyFile, "Dialogs", "style", &bFlushConfFileNeeded, 0, NULL, NULL) == 0);
 
911
        
871
912
        gboolean bCustomFont = cairo_dock_get_boolean_key_value (pKeyFile, "Dialogs", "custom", &bFlushConfFileNeeded, TRUE, NULL, NULL);
872
 
        gchar *cFontDescription = (bCustomFont ? cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "message police", &bFlushConfFileNeeded, NULL, "Icons", NULL) : NULL);
873
 
        if (cFontDescription == NULL)
874
 
                cFontDescription = cairo_dock_get_default_system_font ();
 
913
        gchar *cFont = (bCustomFont ? cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "message police", &bFlushConfFileNeeded, NULL, "Icons", NULL) : NULL);
 
914
        gldi_text_description_set_font (&pDialogs->dialogTextDescription, cFont);
875
915
        
876
 
        PangoFontDescription *fd = pango_font_description_from_string (cFontDescription);
877
 
        pDialogs->dialogTextDescription.cFont = g_strdup (pango_font_description_get_family (fd));
878
 
        pDialogs->dialogTextDescription.iSize = pango_font_description_get_size (fd);
879
 
        if (!pango_font_description_get_size_is_absolute (fd))
880
 
                pDialogs->dialogTextDescription.iSize /= PANGO_SCALE;
881
 
        if (pDialogs->dialogTextDescription.iSize == 0)
882
 
                pDialogs->dialogTextDescription.iSize = 14;
883
 
        if (!bCustomFont)
884
 
                pDialogs->dialogTextDescription.iSize *= 1.33;  // c'est pas beau, mais ca evite de casser tous les themes.
885
 
        pDialogs->dialogTextDescription.iWeight = pango_font_description_get_weight (fd);
886
 
        pDialogs->dialogTextDescription.iStyle = pango_font_description_get_style (fd);
887
916
        pDialogs->dialogTextDescription.fMaxRelativeWidth = .5;  // limit to half of the screen (the dialog is not placed on a given screen, it can overlap 2 screens, so it's half of the mean screen width)
888
917
        
889
 
        if (g_key_file_has_key (pKeyFile, "Dialogs", "message size", NULL))  // anciens parametres.
890
 
        {
891
 
                pDialogs->dialogTextDescription.iSize = g_key_file_get_integer (pKeyFile, "Dialogs", "message size", NULL);
892
 
                int iLabelWeight = g_key_file_get_integer (pKeyFile, "Dialogs", "message weight", NULL);
893
 
                pDialogs->dialogTextDescription.iWeight = cairo_dock_get_pango_weight_from_1_9 (iLabelWeight);
894
 
                gboolean bLabelStyleItalic = g_key_file_get_boolean (pKeyFile, "Dialogs", "message italic", NULL);
895
 
                if (bLabelStyleItalic)
896
 
                        pDialogs->dialogTextDescription.iStyle = PANGO_STYLE_ITALIC;
897
 
                else
898
 
                        pDialogs->dialogTextDescription.iStyle = PANGO_STYLE_NORMAL;
899
 
                
900
 
                pango_font_description_set_size (fd, pDialogs->dialogTextDescription.iSize * PANGO_SCALE);
901
 
                pango_font_description_set_weight (fd, pDialogs->dialogTextDescription.iWeight);
902
 
                pango_font_description_set_style (fd, pDialogs->dialogTextDescription.iStyle);
903
 
                
904
 
                g_free (cFontDescription);
905
 
                cFontDescription = pango_font_description_to_string (fd);
906
 
                g_key_file_set_string (pKeyFile, "Dialogs", "message police", cFontDescription);
907
 
                bFlushConfFileNeeded = TRUE;
908
 
        }
909
 
        pango_font_description_free (fd);
910
 
        g_free (cFontDescription);
911
 
        pDialogs->dialogTextDescription.bOutlined = cairo_dock_get_boolean_key_value (pKeyFile, "Dialogs", "outlined", &bFlushConfFileNeeded, FALSE, NULL, NULL);
 
918
        pDialogs->dialogTextDescription.bOutlined = FALSE;
912
919
        pDialogs->dialogTextDescription.iMargin = 0;
 
920
        pDialogs->dialogTextDescription.bNoDecorations = TRUE;
913
921
        
914
922
        double couleur_dtext[3] = {0., 0., 0.};
915
923
        cairo_dock_get_double_list_key_value (pKeyFile, "Dialogs", "text color", &bFlushConfFileNeeded, pDialogs->dialogTextDescription.fColorStart, 3, couleur_dtext, NULL, NULL);
916
 
        memcpy (&pDialogs->dialogTextDescription.fColorStop, &pDialogs->dialogTextDescription.fColorStart, 3*sizeof (double));
917
 
        
918
 
        pDialogs->cDecoratorName = cairo_dock_get_string_key_value (pKeyFile, "Dialogs", "decorator", &bFlushConfFileNeeded, "comics", NULL, NULL);
919
 
 
 
924
        
 
925
        pDialogs->dialogTextDescription.bUseDefaultColors = pDialogs->bUseDefaultColors;
 
926
        
920
927
        return bFlushConfFileNeeded;
921
928
}
922
929
 
928
935
{
929
936
        g_free (pDialogs->cButtonOkImage);
930
937
        g_free (pDialogs->cButtonCancelImage);
931
 
        g_free (pDialogs->dialogTextDescription.cFont);
 
938
        gldi_text_description_reset (&pDialogs->dialogTextDescription);
932
939
        g_free (pDialogs->cDecoratorName);
933
940
}
934
941
 
981
988
        CairoDialog *pDialog = (CairoDialog*)obj;
982
989
        CairoDialogAttr *pAttribute = (CairoDialogAttr*)attr;
983
990
        
 
991
        //\________________ set up its orientation (do it now, as we need bDirectionUp to place the internal widgets)
 
992
        pDialog->pIcon = pAttribute->pIcon;
 
993
        _set_dialog_orientation (pDialog, pAttribute->pContainer);  // renseigne aussi bDirectionUp, bIsHorizontal, et iHeight.
 
994
        
984
995
        gldi_dialog_init_internals (pDialog, pAttribute);
985
996
        
986
997
        //\________________ Interactive dialogs are set modal, to be fixed.
1006
1017
        if (pDialog->iNbButtons != 0 && (s_pButtonOkSurface == NULL || s_pButtonCancelSurface == NULL))
1007
1018
                _load_dialog_buttons (myDialogsParam.cButtonOkImage, myDialogsParam.cButtonCancelImage);
1008
1019
        
1009
 
        //\________________ On definit son orientation.
1010
 
        _set_dialog_orientation (pDialog, pContainer);  // renseigne aussi bDirectionUp, bIsHorizontal, et iHeight.
1011
 
        
1012
1020
        //\________________ on le place parmi les autres.
1013
1021
        _place_dialog (pDialog, pContainer);  // renseigne aussi bDirectionUp, bIsHorizontal, et iHeight.
1014
1022