/opt/cairo-dock/trunk/cairo-dock/src/cairo-dock-applet-facility.h

Aller à la documentation de ce fichier.
00001 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
00002 
00003 #ifndef __CAIRO_DOCK_APPLET_FACILITY__
00004 #define  __CAIRO_DOCK_APPLET_FACILITY__
00005 
00006 #include "cairo-dock-struct.h"
00007 
00021 gchar *cairo_dock_check_conf_file_exists (gchar *cUserDataDirName, gchar *cShareDataDir, gchar *cConfFileName);
00022 
00023 void cairo_dock_free_minimal_config (CairoDockMinimalAppletConfig *pMinimalConfig);
00024 
00034 void cairo_dock_set_icon_surface_full (cairo_t *pIconContext, cairo_surface_t *pSurface, double fScale, double fAlpha, Icon *pIcon, CairoDockContainer *pContainer);
00040 #define cairo_dock_set_icon_surface(pIconContext, pSurface) cairo_dock_set_icon_surface_full (pIconContext, pSurface, 1, 1, NULL, NULL)
00041 
00048 void cairo_dock_draw_bar_on_icon (cairo_t *pIconContext, double fValue, Icon *pIcon, CairoDockContainer *pContainer);
00049 
00056 void cairo_dock_add_reflection_to_icon (cairo_t *pIconContext, Icon *pIcon, CairoDockContainer *pContainer);
00064 void cairo_dock_set_icon_surface_with_reflect (cairo_t *pIconContext, cairo_surface_t *pSurface, Icon *pIcon, CairoDockContainer *pContainer);
00072 void cairo_dock_set_image_on_icon (cairo_t *pIconContext, gchar *cImagePath, Icon *pIcon, CairoDockContainer *pContainer);
00073 
00081 void cairo_dock_set_icon_name (cairo_t *pSourceContext, const gchar *cIconName, Icon *pIcon, CairoDockContainer *pContainer);
00082 
00090 void cairo_dock_set_quick_info (cairo_t *pSourceContext, const gchar *cQuickInfo, Icon *pIcon, double fMaxScale);
00099 void cairo_dock_set_quick_info_full (cairo_t *pSourceContext, Icon *pIcon, CairoDockContainer *pContainer, const gchar *cQuickInfoFormat, ...);
00104 #define cairo_dock_remove_quick_info(pIcon) cairo_dock_set_quick_info (NULL, NULL, pIcon, 1)
00105 
00106 void cairo_dock_set_hours_minutes_as_quick_info (cairo_t *pSourceContext, Icon *pIcon, CairoDockContainer *pContainer, int iTimeInSeconds);
00107 void cairo_dock_set_minutes_secondes_as_quick_info (cairo_t *pSourceContext, Icon *pIcon, CairoDockContainer *pContainer, int iTimeInSeconds);
00108 
00109 
00110 
00118 void cairo_dock_animate_icon (Icon *pIcon, CairoDock *pDock, CairoDockAnimationType iAnimationType, int iNbRounds);
00119 
00132 gchar* cairo_dock_manage_themes_for_applet (gchar *cAppletShareDataDir, gchar *cThemeDirName, gchar *cAppletConfFilePath, GKeyFile *pKeyFile, gchar *cGroupName, gchar *cKeyName, gboolean *bFlushConfFileNeeded, gchar *cDefaultThemeName);
00133 
00140 GtkWidget *cairo_dock_create_sub_menu (gchar *cLabel, GtkWidget *pMenu);
00141 
00142 
00143 typedef struct {
00144         gint iSidTimer;
00145         gint iSidTimerRedraw;
00146         gint iThreadIsRunning;
00147         GMutex *pMutexData;
00148         GVoidFunc acquisition;
00149         GVoidFunc read;
00150         GVoidFunc update;
00151         gint iCheckInterval;
00152 } CairoDockMeasure;
00153 
00158 void cairo_dock_launch_measure (CairoDockMeasure *pMeasureTimer);
00167 CairoDockMeasure *cairo_dock_new_measure_timer (int iCheckInterval, GVoidFunc acquisition, GVoidFunc read, GVoidFunc update);
00172 void cairo_dock_stop_measure_timer (CairoDockMeasure *pMeasureTimer);
00177 void cairo_dock_free_measure_timer (CairoDockMeasure *pMeasureTimer);
00183 gboolean cairo_dock_measure_is_active (CairoDockMeasure *pMeasureTimer);
00189 void cairo_dock_change_measure_frequency (CairoDockMeasure *pMeasureTimer, int iNewCheckInterval);
00190 
00191 
00192 //\_________________________________ INIT
00196 #define CD_APPLET_H \
00197 CairoDockVisitCard *pre_init (void); \
00198 void init (GKeyFile *pKeyFile, Icon *pIcon, CairoDockContainer *pContainer, gchar *cConfFilePath, GError **erreur); \
00199 void stop (void); \
00200 gboolean reload (GKeyFile *pKeyFile, gchar *cConfFilePath, CairoDockContainer *pNewContainer);
00201 
00202 //\______________________ pre_init.
00212 #define CD_APPLET_PRE_INIT_BEGIN(cName, iMajorVersion, iMinorVersion, iMicroVersion, iAppletCategory) \
00213 Icon *myIcon = NULL; \
00214 CairoDock *myDock = NULL; \
00215 CairoDockDesklet *myDesklet = NULL; \
00216 CairoDockContainer *myContainer = NULL; \
00217 cairo_t *myDrawContext = NULL; \
00218 AppletConfig myConfig; \
00219 AppletData myData; \
00220 CairoDockVisitCard *pre_init (void) \
00221 { \
00222         CairoDockVisitCard *pVisitCard = g_new0 (CairoDockVisitCard, 1); \
00223         pVisitCard->cModuleName = g_strdup (cName); \
00224         pVisitCard->cReadmeFilePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_README_FILE); \
00225         pVisitCard->iMajorVersionNeeded = iMajorVersion; \
00226         pVisitCard->iMinorVersionNeeded = iMinorVersion; \
00227         pVisitCard->iMicroVersionNeeded = iMicroVersion; \
00228         pVisitCard->cPreviewFilePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_PREVIEW_FILE); \
00229         pVisitCard->cGettextDomain = g_strdup (MY_APPLET_GETTEXT_DOMAIN); \
00230         pVisitCard->cDockVersionOnCompilation = g_strdup (MY_APPLET_DOCK_VERSION); \
00231         pVisitCard->cUserDataDir = g_strdup (MY_APPLET_USER_DATA_DIR); \
00232         pVisitCard->cShareDataDir = g_strdup (MY_APPLET_SHARE_DATA_DIR); \
00233         pVisitCard->cConfFileName = (MY_APPLET_CONF_FILE != NULL && strcmp (MY_APPLET_CONF_FILE, "none") != 0 ? g_strdup (MY_APPLET_CONF_FILE) : NULL); \
00234         pVisitCard->cModuleVersion = g_strdup (MY_APPLET_VERSION);\
00235         pVisitCard->iCategory =iAppletCategory ;\
00236         pVisitCard->cIconFilePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, MY_APPLET_ICON_FILE);
00237 
00240 #define CD_APPLET_PRE_INIT_END \
00241         return pVisitCard; \
00242 }
00243 
00246 #define CD_APPLET_DEFINITION(cName, iMajorVersion, iMinorVersion, iMicroVersion, iAppletCategory) \
00247 CD_APPLET_PRE_INIT_BEGIN (cName, iMajorVersion, iMinorVersion, iMicroVersion, iAppletCategory) \
00248 CD_APPLET_PRE_INIT_END
00249 
00250 
00251 
00252 //\______________________ init.
00258 #define CD_APPLET_INIT_BEGIN(erreur) \
00259 void init (GKeyFile *pKeyFile, Icon *pIcon, CairoDockContainer *pContainer, gchar *cConfFilePath, GError **erreur) \
00260 { \
00261         g_return_if_fail (pContainer != NULL && pIcon != NULL); \
00262         myIcon = pIcon; \
00263         myContainer = pContainer; \
00264         myDock = (CAIRO_DOCK_IS_DOCK (pContainer) ? CAIRO_DOCK_DOCK (pContainer) : NULL); \
00265         myDesklet = (CAIRO_DOCK_IS_DESKLET (pContainer) ? CAIRO_DOCK_DESKLET (pContainer) : NULL); \
00266         read_conf_file (pKeyFile, cConfFilePath); \
00267         if (CAIRO_DOCK_IS_DOCK (myContainer)) \
00268         { \
00269                 if (myIcon != NULL) \
00270                 { \
00271                         myDrawContext = cairo_create (myIcon->pIconBuffer); \
00272                         g_return_if_fail (cairo_status (myDrawContext) == CAIRO_STATUS_SUCCESS); \
00273                 } \
00274         } \
00275         else \
00276                 myDrawContext = NULL;
00277 
00281 #define CD_APPLET_INIT_END \
00282         return; \
00283 }
00284 
00285 //\______________________ stop.
00289 #define CD_APPLET_STOP_BEGIN \
00290 void stop (void) \
00291 {
00292 
00296 #define CD_APPLET_STOP_END \
00297         reset_data (); \
00298         reset_config (); \
00299         myDock = NULL; \
00300         myDesklet = NULL; \
00301         myContainer = NULL; \
00302         myIcon = NULL; \
00303         if (myDrawContext != NULL) \
00304                 cairo_destroy (myDrawContext); \
00305         myDrawContext = NULL; \
00306 }
00307 
00308 //\______________________ reload.
00312 #define CD_APPLET_RELOAD_BEGIN \
00313 gboolean reload (GKeyFile *pKeyFile, gchar *cConfFilePath, CairoDockContainer *pNewContainer) \
00314 { \
00315         cd_message ("%s (%s)\n", __func__, cConfFilePath); \
00316         g_return_val_if_fail (pNewContainer != NULL, FALSE); \
00317         CairoDockContainer *pOldContainer = myContainer; \
00318         gboolean bContainerTypeChanged = (myContainer == NULL || myContainer->iType != pNewContainer->iType); \
00319         myContainer = pNewContainer; \
00320         myDock = (CAIRO_DOCK_IS_DOCK (pNewContainer) ? CAIRO_DOCK_DOCK (pNewContainer) : NULL); \
00321         myDesklet = (CAIRO_DOCK_IS_DESKLET (pNewContainer) ? CAIRO_DOCK_DESKLET (pNewContainer) : NULL); \
00322         if (pKeyFile != NULL) \
00323                 read_conf_file (pKeyFile, cConfFilePath); \
00324         if (myDrawContext != NULL) \
00325                 cairo_destroy (myDrawContext); \
00326         if (CAIRO_DOCK_IS_DOCK (myContainer)) \
00327         { \
00328                 myDrawContext = cairo_create (myIcon->pIconBuffer); \
00329                 g_return_val_if_fail (cairo_status (myDrawContext) == CAIRO_STATUS_SUCCESS, FALSE); \
00330         } \
00331         else \
00332                 myDrawContext = NULL;
00333 
00337 #define CD_APPLET_RELOAD_END \
00338         return TRUE; \
00339 }
00340 
00344 #define CD_APPLET_MY_CONFIG_CHANGED (pKeyFile != NULL)
00345 
00349 #define CD_APPLET_MY_CONTAINER_TYPE_CHANGED bContainerTypeChanged
00350 
00354 #define CD_APPLET_MY_OLD_CONTAINER pOldContainer;
00355 
00356 
00360 #define CD_APPLET_MY_CONF_FILE cConfFilePath
00361 
00364 #define CD_APPLET_MY_KEY_FILE pKeyFile
00365 
00366 
00367 //\_________________________________ CONFIG
00368 //\______________________ read_conf_file.
00372 #define CD_APPLET_GET_CONFIG_BEGIN \
00373 void read_conf_file (GKeyFile *pKeyFile, gchar *cConfFilePath) \
00374 { \
00375         gboolean bFlushConfFileNeeded = FALSE, bNewKeysPresent = FALSE; \
00376         reset_config ();
00377 
00381 #define CD_APPLET_GET_CONFIG_END \
00382         if (bNewKeysPresent) \
00383                 cairo_dock_write_keys_to_file (pKeyFile, cConfFilePath); \
00384         if (! bFlushConfFileNeeded) \
00385                 bFlushConfFileNeeded = cairo_dock_conf_file_needs_update (pKeyFile, MY_APPLET_VERSION); \
00386         if (bFlushConfFileNeeded) \
00387                 cairo_dock_flush_conf_file (pKeyFile, cConfFilePath, MY_APPLET_SHARE_DATA_DIR);\
00388 }
00389 
00390 
00394 #define CD_APPLET_CONFIG_H \
00395 void read_conf_file (GKeyFile *pKeyFile, gchar *cConfFilePath); \
00396 void reset_config (void); \
00397 void reset_data (void);
00398 
00399 
00407 #define CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT(cGroupName, cKeyName, bDefaultValue) cairo_dock_get_boolean_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, bDefaultValue, NULL, NULL)
00408 
00415 #define CD_CONFIG_GET_BOOLEAN(cGroupName, cKeyName) \
00416 CD_CONFIG_GET_BOOLEAN_WITH_DEFAULT (cGroupName, cKeyName, TRUE)
00417 
00425 #define CD_CONFIG_GET_INTEGER_WITH_DEFAULT(cGroupName, cKeyName, iDefaultValue) cairo_dock_get_integer_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, iDefaultValue, NULL, NULL)
00426 
00432 #define CD_CONFIG_GET_INTEGER(cGroupName, cKeyName)CD_CONFIG_GET_INTEGER_WITH_DEFAULT (cGroupName, cKeyName, 0)
00433 
00441 #define CD_CONFIG_GET_DOUBLE_WITH_DEFAULT(cGroupName, cKeyName, fDefaultValue) cairo_dock_get_double_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, 0., NULL, NULL)
00442 
00448 #define CD_CONFIG_GET_DOUBLE(cGroupName, cKeyName) CD_CONFIG_GET_DOUBLE_WITH_DEFAULT (cGroupName, cKeyName, 0.)
00449 
00457 #define CD_CONFIG_GET_STRING_WITH_DEFAULT(cGroupName, cKeyName, cDefaultValue) cairo_dock_get_string_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, cDefaultValue, NULL, NULL)
00458 
00464 #define CD_CONFIG_GET_STRING(cGroupName, cKeyName) CD_CONFIG_GET_STRING_WITH_DEFAULT (cGroupName, cKeyName, NULL)
00465 
00474 #define CD_CONFIG_GET_STRING_LIST_WITH_DEFAULT(cGroupName, cKeyName, length, cDefaultValues) cairo_dock_get_string_list_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, length, cDefaultValues, NULL, NULL)
00475 
00482 #define CD_CONFIG_GET_STRING_LIST(cGroupName, cKeyName, length) CD_CONFIG_GET_STRING_LIST_WITH_DEFAULT(cGroupName, cKeyName, length, NULL)
00483 
00491 #define CD_CONFIG_GET_ANIMATION_WITH_DEFAULT(cGroupName, cKeyName, iDefaultAnimation) cairo_dock_get_animation_type_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, iDefaultAnimation, NULL, NULL);
00492 
00498 #define CD_CONFIG_GET_ANIMATION(cGroupName, cKeyName) CD_CONFIG_GET_ANIMATION_WITH_DEFAULT(cGroupName, cKeyName, CAIRO_DOCK_BOUNCE)
00499 
00507 #define CD_CONFIG_GET_COLOR_WITH_DEFAULT(cGroupName, cKeyName, pColorBuffer, pDefaultColor) cairo_dock_get_double_list_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, pColorBuffer, 4, pDefaultColor, NULL, NULL);
00508 
00514 #define CD_CONFIG_GET_COLOR(cGroupName, cKeyName, pColorBuffer) CD_CONFIG_GET_COLOR_WITH_DEFAULT(cGroupName, cKeyName, pColorBuffer, NULL)
00515 
00522 #define CD_CONFIG_GET_COLOR_RVB_WITH_DEFAULT(cGroupName, cKeyName, pColorBuffer, pDefaultColor) cairo_dock_get_double_list_key_value (pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, pColorBuffer, 3, pDefaultColor, NULL, NULL);
00523 
00529 #define CD_CONFIG_GET_COLOR_RVB(cGroupName, cKeyName, pColorBuffer) CD_CONFIG_GET_COLOR_RVB_WITH_DEFAULT(cGroupName, cKeyName, pColorBuffer, NULL)
00530 
00539 #define CD_CONFIG_GET_THEME_PATH(cGroupName, cKeyName, cThemesDirName, cDefaultThemeName) \
00540 cairo_dock_manage_themes_for_applet (MY_APPLET_SHARE_DATA_DIR, cThemesDirName, CD_APPLET_MY_CONF_FILE, pKeyFile, cGroupName, cKeyName, &bFlushConfFileNeeded, cDefaultThemeName)
00541 
00545 #define CD_APPLET_RESET_CONFIG_BEGIN \
00546 void reset_config (void) \
00547 {
00548 
00551 #define CD_APPLET_RESET_CONFIG_END \
00552         memset (&myConfig, 0, sizeof (AppletConfig)); \
00553 }
00554 
00558 #define CD_APPLET_RESET_DATA_BEGIN \
00559 void reset_data(void) \
00560 {
00561 
00564 #define CD_APPLET_RESET_DATA_END \
00565         memset (&myData, 0, sizeof (AppletData)); \
00566 }
00567 
00568 //\_________________________________ NOTIFICATIONS
00569 //\______________________ fonction about.
00574 #define CD_APPLET_ABOUT(cMessage) \
00575 void about (GtkMenuItem *menu_item, gpointer *data) \
00576 { \
00577         cairo_dock_show_temporary_dialog (cMessage, myIcon, myContainer, 0); \
00578 }
00579 
00582 #define CD_APPLET_ABOUT_H \
00583 void about (GtkMenuItem *menu_item, gpointer *data);
00584 
00585 //\______________________ notification clique gauche.
00586 #define CD_APPLET_ON_CLICK action_on_click
00587 
00590 #define CD_APPLET_REGISTER_FOR_CLICK_EVENT cairo_dock_register_notification (CAIRO_DOCK_CLICK_ICON, (CairoDockNotificationFunc) CD_APPLET_ON_CLICK, CAIRO_DOCK_RUN_FIRST);
00591 
00594 #define CD_APPLET_UNREGISTER_FOR_CLICK_EVENT cairo_dock_remove_notification_func (CAIRO_DOCK_CLICK_ICON, (CairoDockNotificationFunc) CD_APPLET_ON_CLICK);
00595 
00599 #define CD_APPLET_ON_CLICK_BEGIN \
00600 gboolean CD_APPLET_ON_CLICK (gpointer *data) \
00601 { \
00602         Icon *pClickedIcon = data[0]; \
00603         CairoDockContainer *pClickedContainer = data[1]; \
00604         guint iButtonState = GPOINTER_TO_INT (data[2]); \
00605         if (pClickedIcon == myIcon || (myIcon != NULL && pClickedContainer == CAIRO_DOCK_CONTAINER (myIcon->pSubDock)) || pClickedContainer == CAIRO_DOCK_CONTAINER (myDesklet)) \
00606         {
00607 
00611 #define CD_APPLET_ON_CLICK_END \
00612                 return CAIRO_DOCK_INTERCEPT_NOTIFICATION; \
00613         } \
00614         return CAIRO_DOCK_LET_PASS_NOTIFICATION; \
00615 }
00616 
00619 #define CD_APPLET_ON_CLICK_H \
00620 gboolean CD_APPLET_ON_CLICK (gpointer *data);
00621 
00622 //\______________________ notification construction menu.
00623 #define CD_APPLET_ON_BUILD_MENU applet_on_build_menu
00624 
00627 #define CD_APPLET_REGISTER_FOR_BUILD_MENU_EVENT cairo_dock_register_notification (CAIRO_DOCK_BUILD_MENU, (CairoDockNotificationFunc) CD_APPLET_ON_BUILD_MENU, CAIRO_DOCK_RUN_FIRST);
00628 
00631 #define CD_APPLET_UNREGISTER_FOR_BUILD_MENU_EVENT cairo_dock_remove_notification_func (CAIRO_DOCK_BUILD_MENU, (CairoDockNotificationFunc) CD_APPLET_ON_BUILD_MENU);
00632 
00636 #define CD_APPLET_ON_BUILD_MENU_BEGIN \
00637 gboolean CD_APPLET_ON_BUILD_MENU (gpointer *data) \
00638 { \
00639         Icon *pClickedIcon = data[0]; \
00640         CairoDockContainer *pClickedContainer = data[1]; \
00641         if (pClickedIcon == myIcon || (myIcon != NULL && pClickedContainer == CAIRO_DOCK_CONTAINER (myIcon->pSubDock)) || pClickedContainer == CAIRO_DOCK_CONTAINER (myDesklet)) \
00642         { \
00643                 GtkWidget *pAppletMenu = data[2]; \
00644                 GtkWidget *pMenuItem, image; \
00645                 pMenuItem = gtk_separator_menu_item_new (); \
00646                 gtk_menu_shell_append(GTK_MENU_SHELL (pAppletMenu), pMenuItem);
00647 
00651 #define CD_APPLET_ON_BUILD_MENU_END \
00652         } \
00653         return CAIRO_DOCK_LET_PASS_NOTIFICATION; \
00654 }
00655 
00658 #define CD_APPLET_ON_BUILD_MENU_H \
00659 gboolean CD_APPLET_ON_BUILD_MENU (gpointer *data);
00660 
00664 #define CD_APPLET_MY_MENU pAppletMenu
00665 
00669 #define CD_APPLET_CLICKED_ICON pClickedIcon
00670 
00673 #define CD_APPLET_CLICKED_CONTAINER pClickedContainer
00674 
00678 #define CD_APPLET_SHIFT_CLICK (iButtonState & GDK_SHIFT_MASK)
00679 
00682 #define CD_APPLET_CTRL_CLICK (iButtonState & GDK_CONTROL_MASK)
00683 
00686 #define CD_APPLET_ALT_CLICK (iButtonState & GDK_MOD1_MASK)
00687 
00688 
00695 #define CD_APPLET_ADD_SUB_MENU(cLabel, pSubMenu, pMenu) \
00696         GtkWidget *pSubMenu = gtk_menu_new (); \
00697         pMenuItem = gtk_menu_item_new_with_label (cLabel); \
00698         gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem); \
00699         gtk_menu_item_set_submenu (GTK_MENU_ITEM (pMenuItem), pSubMenu);
00700 
00707 #define CD_APPLET_CREATE_AND_ADD_SUB_MENU(cLabel, pMenu) \
00708         cairo_dock_create_sub_menu (cLabel, pMenu);
00709 
00717 #define CD_APPLET_ADD_IN_MENU_WITH_DATA(cLabel, pFunction, pMenu, pData) \
00718         pMenuItem = gtk_menu_item_new_with_label (cLabel); \
00719         gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), pMenuItem); \
00720         g_signal_connect (G_OBJECT (pMenuItem), "activate", G_CALLBACK (pFunction), pData);
00721 
00728 #define CD_APPLET_ADD_IN_MENU(cLabel, pFunction, pMenu) CD_APPLET_ADD_IN_MENU_WITH_DATA(cLabel, pFunction, pMenu, NULL)
00729 
00738 #define CD_APPLET_ADD_IN_MENU_WITH_STOCK(cLabel, gtkStock, pFunction, pMenu, pData) \
00739         menu_item = gtk_image_menu_item_new_with_label (_(cLabel)); \
00740         image = gtk_image_new_from_stock (gtkStock, GTK_ICON_SIZE_MENU); \
00741         gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (menu_item), image); \
00742         gtk_menu_shell_append  (GTK_MENU_SHELL (pMenu), menu_item); \
00743         g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK(pFunction), pData);
00744 
00745 
00746 
00750 #define CD_APPLET_ADD_SEPARATOR() \
00751         pMenuItem = gtk_separator_menu_item_new (); \
00752         gtk_menu_shell_append(GTK_MENU_SHELL (pSubMenu), pMenuItem);
00753 
00758 #define CD_APPLET_ADD_ABOUT_IN_MENU(pMenu) CD_APPLET_ADD_IN_MENU (_("About"), about, pMenu)
00759 
00764 #define CD_APPLET_LAST_ITEM_IN_MENU pMenuItem
00765 
00766 //\______________________ notification clique milieu.
00767 #define CD_APPLET_ON_MIDDLE_CLICK action_on_middle_click
00768 
00771 #define CD_APPLET_REGISTER_FOR_MIDDLE_CLICK_EVENT cairo_dock_register_notification (CAIRO_DOCK_MIDDLE_CLICK_ICON, (CairoDockNotificationFunc) CD_APPLET_ON_MIDDLE_CLICK, CAIRO_DOCK_RUN_FIRST);
00772 
00775 #define CD_APPLET_UNREGISTER_FOR_MIDDLE_CLICK_EVENT cairo_dock_remove_notification_func (CAIRO_DOCK_MIDDLE_CLICK_ICON, (CairoDockNotificationFunc) CD_APPLET_ON_MIDDLE_CLICK);
00776 
00780 #define CD_APPLET_ON_MIDDLE_CLICK_BEGIN \
00781 gboolean CD_APPLET_ON_MIDDLE_CLICK (gpointer *data) \
00782 { \
00783         Icon *pClickedIcon = data[0]; \
00784         CairoDockContainer *pClickedContainer = data[1]; \
00785         if (pClickedIcon == myIcon || (myIcon != NULL && pClickedContainer == CAIRO_DOCK_CONTAINER (myIcon->pSubDock)) || pClickedContainer == CAIRO_DOCK_CONTAINER (myDesklet)) \
00786         {
00787 
00790 #define CD_APPLET_ON_MIDDLE_CLICK_END \
00791                 return CAIRO_DOCK_INTERCEPT_NOTIFICATION; \
00792         } \
00793         return CAIRO_DOCK_LET_PASS_NOTIFICATION; \
00794 }
00795 
00798 #define CD_APPLET_ON_MIDDLE_CLICK_H \
00799 gboolean CD_APPLET_ON_MIDDLE_CLICK (gpointer *data);
00800 
00801 //\______________________ notification drag'n'drop.
00802 #define CD_APPLET_ON_DROP_DATA action_on_drop_data
00803 
00806 #define CD_APPLET_REGISTER_FOR_DROP_DATA_EVENT cairo_dock_register_notification (CAIRO_DOCK_DROP_DATA, (CairoDockNotificationFunc) CD_APPLET_ON_DROP_DATA, CAIRO_DOCK_RUN_FIRST);
00807 
00810 #define CD_APPLET_UNREGISTER_FOR_DROP_DATA_EVENT cairo_dock_remove_notification_func (CAIRO_DOCK_DROP_DATA, (CairoDockNotificationFunc) CD_APPLET_ON_DROP_DATA);
00811 
00815 #define CD_APPLET_ON_DROP_DATA_BEGIN \
00816 gboolean CD_APPLET_ON_DROP_DATA (gpointer *data) \
00817 { \
00818         Icon *pClickedIcon = data[1]; \
00819         CairoDockContainer *pClickedContainer = data[3]; \
00820         if (pClickedIcon == myIcon || (myIcon != NULL && pClickedContainer == CAIRO_DOCK_CONTAINER (myIcon->pSubDock)) || pClickedContainer == CAIRO_DOCK_CONTAINER (myDesklet)) \
00821         { \
00822                 const gchar *cReceivedData = data[0]; \
00823                 g_return_val_if_fail (cReceivedData != NULL, CAIRO_DOCK_LET_PASS_NOTIFICATION);
00824 
00828 #define CD_APPLET_RECEIVED_DATA cReceivedData
00829 
00833 #define CD_APPLET_ON_DROP_DATA_END \
00834                 return CAIRO_DOCK_INTERCEPT_NOTIFICATION; \
00835         } \
00836         return CAIRO_DOCK_LET_PASS_NOTIFICATION; \
00837 }
00838 
00841 #define CD_APPLET_ON_DROP_DATA_H \
00842 gboolean CD_APPLET_ON_DROP_DATA (gpointer *data);
00843 
00844 
00845 //\_________________________________ DESSIN
00846 
00850 #define CD_APPLET_REDRAW_MY_ICON \
00851         cairo_dock_redraw_my_icon (myIcon, myContainer);
00852 
00857 #define CD_APPLET_SET_SURFACE_ON_MY_ICON(pSurface) \
00858         cairo_dock_set_icon_surface_with_reflect (myDrawContext, pSurface, myIcon, myContainer); \
00859         cairo_dock_redraw_my_icon (myIcon, myContainer);
00860 
00865 #define CD_APPLET_SET_SURFACE_ON_MY_ICON_WITH_ZOOM(pSurface, fScale) \
00866         cairo_dock_set_icon_surface_full (myDrawContext, pSurface, fScale, 1., myIcon, myContainer); \
00867         cairo_dock_add_reflection_to_icon (myDrawContext, myIcon, myContainer); \
00868         cairo_dock_redraw_my_icon (myIcon, myContainer);
00869 
00874 #define CD_APPLET_SET_SURFACE_ON_MY_ICON_WITH_ALPHA(pSurface, fAlpha) \
00875         cairo_dock_set_icon_surface_full (myDrawContext, pSurface, 1., fAlpha, myIcon, myContainer); \
00876         cairo_dock_add_reflection_to_icon (myDrawContext, myIcon, myContainer); \
00877         cairo_dock_redraw_my_icon (myIcon, myContainer);
00878 
00883 #define CD_APPLET_SET_SURFACE_ON_MY_ICON_WITH_BAR(pSurface, fValue) \
00884         cairo_dock_set_icon_surface_full (myDrawContext, pSurface, 1., 1., myIcon, myContainer); \
00885         cairo_dock_draw_bar_on_icon (myDrawContext, fValue, myIcon, myContainer); \
00886         cairo_dock_add_reflection_to_icon (myDrawContext, myIcon, myContainer); \
00887         cairo_dock_redraw_my_icon (myIcon, myContainer);
00888 
00893 #define CD_APPLET_SET_IMAGE_ON_MY_ICON(cImagePath) \
00894         if (cImagePath != myIcon->acFileName) \
00895         { \
00896                 g_free (myIcon->acFileName); \
00897                 myIcon->acFileName = g_strdup (cImagePath); \
00898         } \
00899         cairo_dock_set_image_on_icon (myDrawContext, cImagePath, myIcon, myContainer);
00900 
00905 #define CD_APPLET_SET_LOCAL_IMAGE_ON_MY_ICON(cImageName) \
00906         { \
00907                 gchar *cImageFilePath = g_strconcat (MY_APPLET_SHARE_DATA_DIR, "/", cImageName, NULL); \
00908                 CD_APPLET_SET_IMAGE_ON_MY_ICON (cImageFilePath); \
00909                 g_free (cImageFilePath); \
00910         }
00911 
00917 #define CD_APPLET_SET_USER_IMAGE_ON_MY_ICON(cUserImageName, cDefaultLocalImageName) \
00918         { \
00919                 gchar *cImagePath; \
00920                 if (cUserImageName != NULL) \
00921                         cImagePath = cairo_dock_generate_file_path (cUserImageName); \
00922                 else \
00923                         cImagePath = g_strdup_printf ("%s/%s", MY_APPLET_SHARE_DATA_DIR, cDefaultLocalImageName); \
00924                 CD_APPLET_SET_IMAGE_ON_MY_ICON (cImagePath); \
00925                 g_free (cImagePath); \
00926         }
00927 
00933 #define CD_APPLET_SET_ZOOMED_SURFACE_ON_MY_ICON(pSurface, fScale) \
00934         cairo_dock_set_icon_surface_with_zoom (myDrawContext, pSurface, fScale, myIcon, myContainer); \
00935         cairo_dock_redraw_my_icon (myIcon, myContainer);
00936 
00937 
00942 #define CD_APPLET_SET_NAME_FOR_MY_ICON(cIconName) \
00943         cairo_dock_set_icon_name (myDrawContext, cIconName, myIcon, myContainer);
00944 
00949 #define CD_APPLET_SET_QUICK_INFO_ON_MY_ICON(cQuickInfoFormat, ...) \
00950         cairo_dock_set_quick_info_full (myDrawContext, myIcon, myContainer, cQuickInfoFormat, ##__VA_ARGS__);
00951 
00955 #define CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_AND_REDRAW(cQuickInfoFormat, ...) \
00956         cairo_dock_set_quick_info_full (myDrawContext, myIcon, myContainer, cQuickInfoFormat, ##__VA_ARGS__); \
00957         cairo_dock_redraw_my_icon (myIcon, myContainer);
00958 
00962 #define CD_APPLET_SET_HOURS_MINUTES_AS_QUICK_INFO(iTimeInSeconds) \
00963         cairo_dock_set_hours_minutes_as_quick_info (myDrawContext, myIcon, myContainer, iTimeInSeconds);
00964 
00968 #define CD_APPLET_SET_MINUTES_SECONDES_AS_QUICK_INFO(iTimeInSeconds) \
00969         cairo_dock_set_minutes_secondes_as_quick_info (myDrawContext, myIcon, myContainer, iTimeInSeconds);
00970 
00971 
00972 
00978 #define CD_APPLET_ANIMATE_MY_ICON(iAnimationType, iAnimationLength) \
00979         cairo_dock_animate_icon (myIcon, myContainer, iAnimationType, iAnimationLength);
00980 
00986 #define CD_APPLET_LOAD_SURFACE_FOR_MY_APPLET(cImagePath) \
00987         cairo_dock_create_surface_for_icon (cImagePath, myDrawContext, myIcon->fWidth * (myDock ? (1 + g_fAmplitude) / myDock->fRatio : 1), myIcon->fHeight* (myDock ? (1 + g_fAmplitude) / myDock->fRatio : 1));
00988 
00989 
00995 #define CD_APPLET_SET_DESKLET_RENDERER_WITH_DATA(cRendererName, pConfig) \
00996         cairo_dock_set_desklet_renderer_by_name (myDesklet, cRendererName, NULL, CAIRO_DOCK_LOAD_ICONS_FOR_DESKLET, pConfig); \
00997         myDrawContext = cairo_create (myIcon->pIconBuffer);
00998 
01002 #define CD_APPLET_SET_DESKLET_RENDERER(cRendererName) CD_APPLET_SET_DESKLET_RENDERER_WITH_DATA (cRendererName, NULL)
01003 
01004 //\_________________________________ INCLUDE
01008 #define CD_APPLET_INCLUDE_MY_VARS \
01009 extern Icon *myIcon; \
01010 extern cairo_t *myDrawContext; \
01011 extern CairoDock *myDock; \
01012 extern CairoDockDesklet *myDesklet; \
01013 extern CairoDockContainer *myContainer; \
01014 extern AppletConfig myConfig; \
01015 extern AppletData myData;
01016 
01017 
01018 //\_________________________________ INTERNATIONNALISATION
01022 #define D_(message) dgettext (MY_APPLET_GETTEXT_DOMAIN, message)
01023 #define _D D_
01024 
01025 #endif
01026 
01027 
01028 
01029 
01030 #define CD_APPLET_DEFINE_TIMER(_get_data, _read_data, _load_data) \
01031 static int s_iThreadIsRunning = 0, s_iSidTimerRedraw = 0; \
01032 static GStaticMutex mutexData = G_STATIC_MUTEX_INIT; \
01033 static gboolean _cairo_dock_timer (gpointer data) { \
01034         _cairo_dock_launch_measure (); \
01035         return TRUE; } \
01036 static gpointer _cairo_dock_threaded_calculation (gpointer data) { \
01037         _get_data (); \
01038         g_static_mutex_lock (&mutexData); \
01039         _read_data ();  \
01040         g_static_mutex_unlock (&mutexData); \
01041         g_atomic_int_set (&s_iThreadIsRunning, 0); \
01042         return NULL; } \
01043 static gboolean _cairo_dock_check_for_redraw (gpointer data) { \
01044         int iThreadIsRunning = g_atomic_int_get (&s_iThreadIsRunning); \
01045         if (! iThreadIsRunning) { \
01046                 s_iSidTimerRedraw = 0; \
01047                 if (myIcon == NULL) { \
01048                         cd_warning ("annulation du chargement de l'applet"); \
01049                         return FALSE; } \
01050                 g_static_mutex_lock (&mutexData); \
01051                 _load_data (); \
01052                 g_static_mutex_unlock (&mutexData); \
01053                 if (myData.iSidTimer == 0) \
01054                         myData.iSidTimer = g_timeout_add (myConfig.iCheckInterval, (GSourceFunc) _cairo_dock_timer, NULL); \
01055                 return FALSE; } \
01056         return TRUE; } \
01057 void cairo_dock_launch_measure (void) { \
01058         if (g_atomic_int_compare_and_exchange (&s_iThreadIsRunning, 0, 1)) { \
01059                 if (s_iSidTimerRedraw == 0) \
01060                         s_iSidTimerRedraw = g_timeout_add (250, (GSourceFunc) _cairo_dock_check_for_redraw, (gpointer) NULL); \
01061                 GError *erreur = NULL; \
01062                 GThread* pThread = g_thread_create ((GThreadFunc) _cairo_dock_threaded_calculation, NULL, FALSE, &erreur); \
01063                 if (erreur != NULL) { \
01064                         cd_warning ("Attention : %s", erreur->message); \
01065                         g_error_free (erreur); } } }
01066 
01067 #define CD_APPLET_START_TIMER \
01068         cairo_dock_launch_measure ();
01069 
01070 #define CD_APPLET_STOP_TIMER \
01071         if (myData.iSidTimer != 0) { \
01072                 g_source_remove (myData.iSidTimer); \
01073                 myData.iSidTimer = 0; }
01074 
01075 #define CD_APPLET_TIMER_IS_RUNNING (myData.iSidTimer != 0)

Généré le Wed Apr 16 03:27:15 2008 pour Cairo-Dock par  doxygen 1.5.3