static void _cd_show_hide_desklet (void) { if (!myData.bDeskletsVisible) { myData.pLastActiveWindow = gldi_windows_get_active (); gldi_object_ref (GLDI_OBJECT(myData.pLastActiveWindow)); gldi_desklets_set_visible (TRUE); // TRUE <=> les desklets de la couche widget aussi. } else { gldi_desklets_set_visibility_to_default (); if (myData.pLastActiveWindow) { gldi_window_show (myData.pLastActiveWindow); gldi_object_unref (GLDI_OBJECT(myData.pLastActiveWindow)); myData.pLastActiveWindow = NULL; } } myData.bDeskletsVisible = ! myData.bDeskletsVisible; if (myConfig.cVisibleImage) { if (myData.bDesktopVisible || myData.bDeskletsVisible) CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cVisibleImage); else CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cHiddenImage); } }
void cd_musiplayer_apply_cover (void) { cd_debug ("%s (%s)", __func__, myData.cCoverPath); g_return_if_fail (myData.cCoverPath != NULL); if (CD_APPLET_MY_CONTAINER_IS_OPENGL && myConfig.bOpenglThemes) { if (myData.iPrevTextureCover != 0) _cairo_dock_delete_texture (myData.iPrevTextureCover); myData.iPrevTextureCover = myData.TextureCover; myData.TextureCover = cairo_dock_create_texture_from_image (myData.cCoverPath); if (myData.iPrevTextureCover != 0) { myData.iCoverTransition = NB_TRANSITION_STEP; cairo_dock_launch_animation (myContainer); } else { cd_opengl_render_to_texture (myApplet); CD_APPLET_REDRAW_MY_ICON; } } else { CD_APPLET_SET_IMAGE_ON_MY_ICON (myData.cCoverPath); CD_APPLET_REDRAW_MY_ICON; } }
static void _hide_unhide_desklets (void) { if (myData.bHide) { cairo_dock_set_desklets_visibility_to_default (); cairo_dock_show_xwindow (myData.xLastActiveWindow); CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cShowImage); } else { myData.xLastActiveWindow = cairo_dock_get_current_active_window (); cairo_dock_set_all_desklets_visible (myConfig.bShowWidgetLayerDesklet); CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cHideImage); } CD_APPLET_REDRAW_MY_ICON; myData.bHide = ! myData.bHide; }
static gboolean cd_dustbin_display_result (CDSharedMemory *pSharedMemory) { myData.iMeasure = pSharedMemory->iMeasure; //g_print ("trash measure : %d\n", myData.iMeasure); if (myData.iMeasure == 0) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); if (myData.bDisplayFullIcon) { myData.bDisplayFullIcon = FALSE; CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cEmptyUserImage); } } else { if (! myData.bDisplayFullIcon) { myData.bDisplayFullIcon = TRUE; CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cFullUserImage); } if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_TRASHES) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%zd%s", myData.iMeasure, (myDesklet ? D_(" trashe(s)") : "")); } else if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_FILES) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%zd%s", myData.iMeasure, (myDesklet ? D_(" file(s)") : "")); } else if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT) { CD_APPLET_SET_SIZE_AS_QUICK_INFO (myData.iMeasure); } else // on vire les "..." { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); } } CD_APPLET_REDRAW_MY_ICON; return TRUE; }
static void onCoverArtChanged(DBusGProxy *player_proxy,const gchar *cImageURI, gpointer data) // je n'ai jamais vu ce signal appelle... { g_print ("\n%s (%s)\n\n",__func__,cImageURI); g_free (myData.cCoverPath); myData.cCoverPath = g_strdup (cImageURI); CD_APPLET_SET_IMAGE_ON_MY_ICON (myData.cCoverPath); CD_APPLET_REDRAW_MY_ICON; myData.cover_exist = TRUE; if (myData.iSidCheckCover != 0) { g_source_remove (myData.iSidCheckCover); myData.iSidCheckCover = 0; } }
void cd_dustbin_start (GldiModuleInstance *myApplet) { // get the trash folder if not already done. if (myData.cDustbinPath == NULL) myData.cDustbinPath = cairo_dock_fm_get_trash_path (NULL, NULL); // monitor this folder. if (myData.cDustbinPath != NULL) { // try monitoring the trash folder. myData.bMonitoringOK = cairo_dock_fm_add_monitor_full (myData.cDustbinPath, TRUE, NULL, (CairoDockFMMonitorCallback) cd_dustbin_on_file_event, myApplet); if (! myData.bMonitoringOK) { cd_message ("dustbin : can't monitor trash folder\n we'll check it periodically"); } // measure the trash content once, to get the initial stats. CDSharedMemory *pSharedMemory = g_new0 (CDSharedMemory, 1); pSharedMemory->cDustbinPath = g_strdup (myData.cDustbinPath); pSharedMemory->iQuickInfoType = myConfig.iQuickInfoType; myData.pTask = gldi_task_new_full (myData.bMonitoringOK ? 0 : 10, // si le monitoring de fichiers n'est pas disponible, on execute la tache periodiquement. (GldiGetDataAsyncFunc) cd_dustbin_measure_trash, (GldiUpdateSyncFunc) cd_dustbin_display_result, (GFreeFunc) _free_shared_memory, pSharedMemory); pSharedMemory->bDiscard = &myData.pTask->bDiscard; gldi_task_launch (myData.pTask); // on la lance meme si on n'affiche rien, pour savoir si le nombre de fichiers est nul ou non. if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT || myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_FILES) // operation potentiellement longue => on met un petit message discret. { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%s...", (myDesklet ? D_("calculating") : "")); } } else // no trash, set a N/A icon. { CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cEmptyUserImage); CD_APPLET_SET_QUICK_INFO_ON_MY_ICON ("N/A"); } }
static void _on_menu_deactivated (G_GNUC_UNUSED GtkMenuShell *menu, G_GNUC_UNUSED gpointer data) { CD_APPLET_REMOVE_TRANSITION_ON_MY_ICON; CD_APPLET_STOP_DEMANDING_ATTENTION; CD_APPLET_SET_IMAGE_ON_MY_ICON (myIcon->cFileName); }
static void _weather_draw_current_conditions (CairoDockModuleInstance *myApplet) { g_return_if_fail (myDrawContext != NULL); if (myConfig.bCurrentConditions || myData.bErrorRetrievingData) { cd_message (" chargement de l'icone meteo (%x)", myApplet); if (myConfig.bDisplayTemperature && myData.currentConditions.cTemp != NULL/** && myConfig.iDeskletRenderer != MY_DESKLET_MAIN_ICON*/) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%s%s", myData.currentConditions.cTemp, myData.units.cTemp); } else { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); } g_free (myIcon->acFileName); if (myData.bErrorRetrievingData) { myIcon->acFileName = g_strdup_printf ("%s/na.png", myConfig.cThemePath); if (! g_file_test (myIcon->acFileName, G_FILE_TEST_EXISTS)) { g_free (myIcon->acFileName); myIcon->acFileName = g_strdup_printf ("%s/na.svg", myConfig.cThemePath); if (! g_file_test (myIcon->acFileName, G_FILE_TEST_EXISTS)) { g_free (myIcon->acFileName); myIcon->acFileName = g_strdup (MY_APPLET_SHARE_DATA_DIR"/broken.png"); } } } else { myIcon->acFileName = g_strdup_printf ("%s/%s.png", myConfig.cThemePath, myData.currentConditions.cIconNumber); if (! g_file_test (myIcon->acFileName, G_FILE_TEST_EXISTS)) { g_free (myIcon->acFileName); myIcon->acFileName = g_strdup_printf ("%s/%s.svg", myConfig.cThemePath, myData.currentConditions.cIconNumber); } } CD_APPLET_SET_IMAGE_ON_MY_ICON (myIcon->acFileName); } else { CD_APPLET_SET_DEFAULT_IMAGE_ON_MY_ICON_IF_NONE; } /**if (myConfig.iDeskletRenderer == MY_DESKLET_MAIN_ICON) { char *cTemp = NULL; if (myConfig.bDisplayTemperature && myData.currentConditions.cTemp != NULL) cTemp = g_strdup_printf ("%s%s", myData.currentConditions.cTemp, myData.units.cTemp); char *cConditions = NULL; if (myData.currentConditions.cWeatherDescription != NULL) cConditions = g_strdup (myData.currentConditions.cWeatherDescription); gpointer data[2] = {cConditions, cTemp}; cairo_dock_render_desklet_with_new_data (myDesklet, (CairoDeskletRendererDataPtr) data); if (cConditions != NULL) g_free (cConditions); if (cTemp != NULL) g_free (cTemp); }*/ }
void update_icon (void) { cd_debug ("%s (on battery: %d -> %d; time:%.1f -> %.1f ; charge:%.1f -> %.1f)", __func__, myData.bPrevOnBattery, myData.bOnBattery, (double)myData.iPrevTime, (double)myData.iTime, (double)myData.iPrevPercentage, (double)myData.iPercentage); // hide the icon when not on battery or no information available (e.g. with a desktop) if (myConfig.bHideNotOnBattery && myDock && (! myData.bOnBattery)) { if (! myData.bIsHidden) { // we remove the icon gldi_icon_detach (myIcon); myData.bIsHidden = TRUE; } return; // no need any redraw if the icon is hidden, and can't display the dialog properly without the icon. } else if (myData.bIsHidden && myData.bOnBattery && myDock) // if the icon is hidden but we are now on battery, we (re-)insert the icon. { cd_debug ("Re-insert the icon"); gldi_icon_insert_in_container (myIcon, myContainer, CAIRO_DOCK_ANIMATE_ICON); myData.bIsHidden = FALSE; } // no information available or no battery, draw a default icon. if (! myData.bBatteryPresent) { CD_APPLET_REMOVE_MY_DATA_RENDERER; CD_APPLET_SET_IMAGE_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/sector.svg"); CD_APPLET_REDRAW_MY_ICON; return; } gboolean bInit = (cairo_dock_get_icon_data_renderer (myIcon) == NULL); if (bInit) // first time: init or reload _set_data_renderer (myApplet); gboolean bChanged = (myData.bPrevOnBattery != myData.bOnBattery || myData.iPrevPercentage != myData.iPercentage || myData.iTime != myData.iPrevTime || bInit); // just to be sure if (bChanged || myConfig.iDisplayType == CD_POWERMANAGER_GRAPH) // graphs need to be updated each time, even if there is no change. { // update the icon representation if (myConfig.iDisplayType == CD_POWERMANAGER_ICONS) // set the icon if needed { if (myData.iOnBatteryImage != myData.bOnBattery) { if (myData.bOnBattery) CD_APPLET_SET_USER_IMAGE_ON_MY_ICON (myConfig.cUserBatteryIconName, "default-battery.svg"); else CD_APPLET_SET_USER_IMAGE_ON_MY_ICON (myConfig.cUserChargeIconName, "default-charge.svg"); myData.iOnBatteryImage = myData.bOnBattery; } } // render the value double fPercent; if (! myData.bBatteryPresent) fPercent = CAIRO_DATA_RENDERER_UNDEF_VALUE; else fPercent = (double) myData.iPercentage / 100.; CD_APPLET_RENDER_NEW_DATA_ON_MY_ICON (&fPercent); if (bChanged) { // add or remove the charge overlay if the 'on_battery' status has changed. if (myData.bPrevOnBattery != myData.bOnBattery || bInit) { if (! myData.bOnBattery) { CD_APPLET_ADD_OVERLAY_ON_MY_ICON (myConfig.cEmblemIconName ? myConfig.cEmblemIconName : MY_APPLET_SHARE_DATA_DIR"/charge.svg", CAIRO_OVERLAY_MIDDLE); } else { CD_APPLET_REMOVE_OVERLAY_ON_MY_ICON (CAIRO_OVERLAY_MIDDLE); } } // trigger alarms. if (myData.bOnBattery) { // Alert when battery charge goes under a configured value in % if (myData.iPrevPercentage > myConfig.lowBatteryValue && myData.iPercentage <= myConfig.lowBatteryValue) { cd_powermanager_alert(POWER_MANAGER_CHARGE_LOW); if (myConfig.cSoundPath[POWER_MANAGER_CHARGE_LOW] != NULL) cairo_dock_play_sound (myConfig.cSoundPath[POWER_MANAGER_CHARGE_LOW]); } // Alert when battery charge is under 4% if (myData.iPrevPercentage > 4 && myData.iPercentage <= 4) { cd_powermanager_alert (POWER_MANAGER_CHARGE_CRITICAL); if (myConfig.cSoundPath[POWER_MANAGER_CHARGE_CRITICAL] != NULL) cairo_dock_play_sound (myConfig.cSoundPath[POWER_MANAGER_CHARGE_CRITICAL]); } } else { // Alert when battery is charged if(myData.iPrevPercentage > 0 && myData.iPrevPercentage < 100 && myData.iPercentage == 100) // the first condition is to prevent the dialog on startup. cd_powermanager_alert (POWER_MANAGER_CHARGE_FULL); } // update the icon's label. if (myConfig.defaultTitle == NULL || *myConfig.defaultTitle == '\0') { if (! myData.bOnBattery && myData.iPercentage > 99.9) { CD_APPLET_SET_NAME_FOR_MY_ICON_PRINTF ("%d%% - %s", (int)myData.iPercentage, D_("Battery charged")); } else { gchar cFormatBuffer[21]; int iBufferLength = 20; if (myData.iTime != 0) { int time = myData.iTime; int hours = time / 3600; int minutes = (time % 3600) / 60; if (hours != 0) snprintf (cFormatBuffer, iBufferLength, "%d%s%02d", hours, D_("h"), abs (minutes)); else snprintf (cFormatBuffer, iBufferLength, "%d%s", minutes, D_("mn")); } else { strncpy (cFormatBuffer, "-:--", iBufferLength); } CD_APPLET_SET_NAME_FOR_MY_ICON_PRINTF ("%d%% - %s %s", (int)myData.iPercentage, cFormatBuffer, myData.bOnBattery ? D_("remaining") : D_("until charged")); } } myData.bPrevOnBattery = myData.bOnBattery; myData.iPrevPercentage = myData.iPercentage; myData.iPrevTime = myData.iTime; } } }
void cd_mail_init_accounts(CairoDockModuleInstance *myApplet) { if (myData.pMailAccounts == NULL) return ; g_print ("%s (%d comptes)\n", __func__, myData.pMailAccounts->len); //\_______________________ On initialise chaque compte. CDMailAccount *pMailAccount; GList *pIconList = NULL; Icon *pIcon; int iNbIcons = 0; int r; guint i; for (i = 0; i < myData.pMailAccounts->len; i ++) { pMailAccount = g_ptr_array_index (myData.pMailAccounts, i); if( !pMailAccount ) continue; // init this account switch (pMailAccount->driver) { case POP3_STORAGE: r = pop3_mailstorage_init(pMailAccount->storage, pMailAccount->server, pMailAccount->port, NULL, pMailAccount->connection_type, pMailAccount->auth_type, pMailAccount->user, pMailAccount->password, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; case IMAP_STORAGE: r = imap_mailstorage_init(pMailAccount->storage, pMailAccount->server, pMailAccount->port, NULL, pMailAccount->connection_type, IMAP_AUTH_TYPE_PLAIN, pMailAccount->user, pMailAccount->password, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/); break; case NNTP_STORAGE: r = nntp_mailstorage_init(pMailAccount->storage, pMailAccount->server, pMailAccount->port, NULL, pMailAccount->connection_type, NNTP_AUTH_TYPE_PLAIN, pMailAccount->user, pMailAccount->password, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; case MBOX_STORAGE: r = mbox_mailstorage_init(pMailAccount->storage, pMailAccount->path, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; case MH_STORAGE: r = mh_mailstorage_init(pMailAccount->storage, pMailAccount->path, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; case MAILDIR_STORAGE: r = maildir_mailstorage_init(pMailAccount->storage, pMailAccount->path, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; case FEED_STORAGE: r = feed_mailstorage_init(pMailAccount->storage, pMailAccount->path, myData.cWorkingDirPath!=NULL?TRUE:FALSE /*cached*/, myData.cWorkingDirPath /*cache_directory*/, myData.cWorkingDirPath /*flags_directory*/); break; default : r = -1; } // add an icon for this account. if (myData.pMailAccounts->len == 1) // 1 seul compte { pIcon = myIcon; } else { _add_icon (pMailAccount); } iNbIcons ++; // if all is OK, then set a timeout for this mail account if (r == MAIL_NO_ERROR) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON ("..."); pMailAccount->pAccountMailTimer = cairo_dock_new_task (pMailAccount->timeout * 60, (CairoDockGetDataAsyncFunc) cd_mail_get_folder_data, (CairoDockUpdateSyncFunc) cd_mail_update_account_status, pMailAccount); cairo_dock_launch_task (pMailAccount->pAccountMailTimer); } else { cd_warning ("mail : the mail account %s couldn't be initialized !", pMailAccount->name); CairoContainer *pContainer = (myData.pMailAccounts->len == 1 ? myContainer : CD_APPLET_MY_ICONS_LIST_CONTAINER); cairo_dock_set_quick_info (myDrawContext, "N/A", pIcon, cairo_dock_get_max_scale (pContainer)); } } //\_______________________ On efface l'ancienne liste. CD_APPLET_DELETE_MY_ICONS_LIST; //\_______________________ On charge la nouvelle liste. if (myData.pMailAccounts->len > 1) { gpointer pConfig[2] = {GINT_TO_POINTER (FALSE), GINT_TO_POINTER (FALSE)}; CD_APPLET_LOAD_MY_ICONS_LIST (pIconList, myConfig.cRenderer, (iNbIcons > 1 ? "Caroussel" : "Simple"), (iNbIcons > 1 ? pConfig : NULL)); } //\_______________ On dessine l'icone principale initialement. CD_APPLET_SET_IMAGE_ON_MY_ICON (myConfig.cNoMailUserImage); if (iNbIcons > 0) CD_APPLET_SET_QUICK_INFO_ON_MY_ICON ("..."); }
void cd_switcher_draw_main_icon_expanded_mode (void) { // apply the desktop bg or the user image on the main icon, in dock mode int iWidth, iHeight; if (myDock) { CD_APPLET_GET_MY_ICON_EXTENT (&iWidth, &iHeight); myData.switcher.fOneViewportHeight = (iHeight - 2 * myConfig.iLineSize - (myData.switcher.iNbLines - 1) * myConfig.iInLineSize) / myData.switcher.iNbLines; //hauteur d'un bureau/viewport sans compter les lignes exterieures et interieures. myData.switcher.fOneViewportWidth = (iWidth - 2 * myConfig.iLineSize - (myData.switcher.iNbColumns - 1) * myConfig.iInLineSize) / myData.switcher.iNbColumns; //largeur d'un bureau/viewport sans compter les lignes exterieures et interieures. cairo_surface_t *pSurface = NULL; double fZoomX, fZoomY; if (myConfig.iIconDrawing == SWICTHER_MAP_WALLPAPER) { cairo_dock_erase_cairo_context (myDrawContext); pSurface = myData.pDesktopBgMapSurface; fZoomX = 1. * iWidth / myData.iSurfaceWidth; fZoomY= 1. * iHeight / myData.iSurfaceHeight; cairo_translate (myDrawContext, 0., 0.); cairo_save (myDrawContext); cairo_scale (myDrawContext, fZoomX , fZoomY ); cairo_set_source_surface (myDrawContext, pSurface, 0., 0.); cairo_paint(myDrawContext); cairo_restore (myDrawContext); if (CD_APPLET_MY_CONTAINER_IS_OPENGL) cairo_dock_update_icon_texture (myIcon); } else { CD_APPLET_SET_IMAGE_ON_MY_ICON (MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE); } } if (myConfig.bDrawWindows) { GList *pWindowList = cairo_dock_get_current_applis_list (); pWindowList = g_list_sort (pWindowList, (GCompareFunc) _compare_icons_stack_order); CDSwitcherDesktop data; int iNumDesktop=0, iNumViewportX=0, iNumViewportY=0; cairo_t *pCairoContext; Icon *pIcon; GList *pIconsList = CD_APPLET_MY_ICONS_LIST; GList *ic; for (ic = pIconsList; ic != NULL; ic = ic->next) { pIcon = ic->data; cairo_dock_get_icon_extent (pIcon, &iWidth, &iHeight); pCairoContext = cairo_create (pIcon->image.pSurface); cairo_set_line_width (pCairoContext, 1.); if (myConfig.bUseDefaultColors) gldi_style_colors_set_line_color (myDrawContext); else cairo_set_source_rgba (pCairoContext, myConfig.RGBWLineColors[0], myConfig.RGBWLineColors[1], myConfig.RGBWLineColors[2], myConfig.RGBWLineColors[3]); data.iNumDesktop = iNumDesktop; data.iNumViewportX = iNumViewportX; data.iNumViewportY = iNumViewportY; data.iOneViewportWidth = iWidth; data.iOneViewportHeight = iHeight; data.pCairoContext = pCairoContext; g_list_foreach (pWindowList, (GFunc) _cd_switcher_draw_windows_on_viewport, &data); iNumViewportX ++; if (iNumViewportX == g_desktopGeometry.iNbViewportX) { iNumViewportY ++; if (iNumViewportY == g_desktopGeometry.iNbViewportY) iNumDesktop ++; } cairo_destroy (pCairoContext); } g_list_free (pWindowList); // le contenu appartient a la hash table, mais pas la liste. } }