static gboolean _timer (gpointer data) { CD_APPLET_ENTER; time_t t_cur = (time_t) time (NULL); if (t_cur >= myConfig.iShutdownTime) { cd_debug ("shutdown !\n"); if (g_iDesktopEnv == CAIRO_DOCK_KDE) cairo_dock_launch_command ("dbus-send --session --type=method_call --dest=org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout int32:0 int32:2 int32:2"); else cairo_dock_launch_command ("dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop"); myData.iSidTimer = 0; CD_APPLET_LEAVE (FALSE); // inutile de faire quoique ce soit d'autre, puisque l'ordi s'eteint. } else { cd_debug ("shutdown in %d minutes", (int) (myConfig.iShutdownTime - t_cur) / 60); CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%dmn", (int) ceil ((double)(myConfig.iShutdownTime - t_cur) / 60.)); CD_APPLET_REDRAW_MY_ICON; if (t_cur >= myConfig.iShutdownTime - 60) gldi_dialog_show_temporary_with_icon (D_("Your computer will shut-down in 1 minute."), myIcon, myContainer, 8000, "same icon"); } CD_APPLET_LEAVE (TRUE); }
static gboolean _cd_tomboy_reset_quick_info (gpointer data) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d", g_hash_table_size (myData.hNoteTable)); CD_APPLET_REDRAW_MY_ICON; myData.iSidResetQuickInfo = 0; return FALSE; }
static void cd_dustbin_on_file_event (CairoDockFMEventType iEventType, const gchar *cURI, GldiModuleInstance *myApplet) { g_return_if_fail (cURI != NULL); //g_print ("%s (%s, %d)\n", __func__, cURI, myData.iMeasure); switch (iEventType) { case CAIRO_DOCK_FILE_DELETED : case CAIRO_DOCK_FILE_CREATED : if (gldi_task_is_running (myData.pTask)) // task is running, cancel it since files count has changed, no need to finish this measure. { //g_print ("cancel measure\n"); gldi_task_discard (myData.pTask); CDSharedMemory *pSharedMemory = g_new0 (CDSharedMemory, 1); pSharedMemory->cDustbinPath = g_strdup (myData.cDustbinPath); pSharedMemory->iQuickInfoType = myConfig.iQuickInfoType; myData.pTask = gldi_task_new_full (0, (GldiGetDataAsyncFunc) cd_dustbin_measure_trash, (GldiUpdateSyncFunc) cd_dustbin_display_result, (GFreeFunc) _free_shared_memory, pSharedMemory); pSharedMemory->bDiscard = &myData.pTask->bDiscard; } else if (myConfig.iQuickInfoType == CD_DUSTBIN_INFO_WEIGHT || myConfig.iQuickInfoType == CD_DUSTBIN_INFO_NB_FILES) // task was not running, so no waiting message; let's add it before we launch the task. { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%s...", (myDesklet ? D_("calculating") : "")); } gldi_task_launch_delayed (myData.pTask, 500); break ; default : break; } }
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; }
void update_icon(void) { if (myDesklet) return ; if(myData.opening) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d", g_hash_table_size (myData.hNoteTable)); CD_APPLET_SET_SURFACE_ON_MY_ICON (myData.pSurfaceDefault); } else { CD_APPLET_SET_USER_IMAGE_ON_MY_ICON (myConfig.cIconClose, "close.svg"); } }
void cd_tomboy_reset_icon_marks (gboolean bForceRedraw) { GList *pIconsList = CD_APPLET_MY_ICONS_LIST; Icon *icon; GList *ic; for (ic = pIconsList; ic != NULL; ic = ic->next) { icon = ic->data; icon->bHasIndicator = FALSE; } if (bForceRedraw) { if (myDock) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d", g_hash_table_size (myData.hNoteTable)); CD_APPLET_REDRAW_MY_ICON; } cairo_dock_redraw_container (CD_APPLET_MY_ICONS_LIST_CONTAINER); } }
static gboolean _take_screenshot_countdown (CDScreenshotOptions *pOptions) { if (pOptions->iDelay > 0) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d", pOptions->iDelay); CD_APPLET_REDRAW_MY_ICON; pOptions->iDelay --; return TRUE; } else { CD_APPLET_STOP_DEMANDING_ATTENTION; CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); CD_APPLET_REDRAW_MY_ICON; _take_screenshot (pOptions); cd_screenshot_free_options (pOptions); myData.pOptions = NULL; myData.iSidTakeWithDelay = 0; return FALSE; } }
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"); } }
/* Fonction executée à chaque changement de temps joué */ static void onElapsedChanged (DBusGProxy *player_proxy,int elapsed, gpointer data) { myData.iCurrentTime = elapsed; if(elapsed > 0) { //g_print ("%s () : %ds\n", __func__, elapsed); if(myConfig.iQuickInfoType == MY_APPLET_TIME_ELAPSED) { CD_APPLET_SET_MINUTES_SECONDES_AS_QUICK_INFO (elapsed); CD_APPLET_REDRAW_MY_ICON; } else if(myConfig.iQuickInfoType == MY_APPLET_TIME_LEFT) // avec un '-' devant. { CD_APPLET_SET_MINUTES_SECONDES_AS_QUICK_INFO (elapsed - myData.iSongLength); CD_APPLET_REDRAW_MY_ICON; } else if(myConfig.iQuickInfoType == MY_APPLET_PERCENTAGE) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d%%", (int) (100.*elapsed/myData.iSongLength)); CD_APPLET_REDRAW_MY_ICON; } } }
void cd_tomboy_show_results (GList *pIconsList) { //\_______________ On marque les icones du resultat. cd_tomboy_reset_icon_marks (FALSE); int iNbResults = 0; Icon *icon; GList *ic; for (ic = pIconsList; ic != NULL; ic = ic->next) { icon = ic->data; icon->bHasIndicator = TRUE; iNbResults ++; } //\_______________ On les montre. if (myDock) { cairo_dock_show_subdock (myIcon, myDock, FALSE); cairo_dock_redraw_container (CAIRO_CONTAINER (myIcon->pSubDock)); } else cairo_dock_redraw_container (myContainer); //\_______________ On affiche le resultat. if (myDock) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d %s", iNbResults, iNbResults > 1 ? D_("results") : D_("result")); if (myData.iSidResetQuickInfo != 0) g_source_remove (myData.iSidResetQuickInfo); myData.iSidResetQuickInfo = g_timeout_add_seconds (5, _cd_tomboy_reset_quick_info, NULL); } else { cairo_dock_show_temporary_dialog_with_icon ("%d %s", pIconsList ? pIconsList->data : myDesklet->icons->data, myContainer, 3000, MY_APPLET_SHARE_DATA_DIR"/"MY_APPLET_ICON_FILE, iNbResults, iNbResults > 1 ? D_("results") : D_("result")); } }
void cd_update_icon (void) { gboolean bNeedRedraw = FALSE; // update the volume info switch (myConfig.iVolumeDisplay) { case VOLUME_ON_LABEL : CD_APPLET_SET_NAME_FOR_MY_ICON_PRINTF ("%s: %d%%", myData.mixer_card_name?myData.mixer_card_name:D_("Volume"), myData.iCurrentVolume); break; case VOLUME_ON_ICON : CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d%%", myData.iCurrentVolume); bNeedRedraw = TRUE; break; default : break; } // update the icon representation switch (myConfig.iVolumeEffect) // set the icon if needed { case VOLUME_EFFECT_NONE : case VOLUME_EFFECT_BAR : if (myData.bMuteImage < 0 || (myData.bIsMute != myData.bMuteImage)) { if (myData.bIsMute) CD_APPLET_SET_USER_IMAGE_ON_MY_ICON (myConfig.cMuteIcon, "mute.svg"); else CD_APPLET_SET_USER_IMAGE_ON_MY_ICON (myConfig.cDefaultIcon, "default.svg"); myData.bMuteImage = myData.bIsMute; bNeedRedraw = FALSE; } break; default : break; } switch (myConfig.iVolumeEffect) // render the value { case VOLUME_EFFECT_BAR : case VOLUME_EFFECT_GAUGE : { double fPercent; if (myData.bIsMute) fPercent = CAIRO_DATA_RENDERER_UNDEF_VALUE; else fPercent = (double) myData.iCurrentVolume / 100.; CD_APPLET_RENDER_NEW_DATA_ON_MY_ICON (&fPercent); bNeedRedraw = FALSE; } break; default : break; } if (bNeedRedraw) CD_APPLET_REDRAW_MY_ICON; if (myData.pScale) { cd_mixer_set_volume_with_no_callback (myData.pScale, myData.iCurrentVolume); } }
void update_icon(void) { gboolean bNeedRedraw = FALSE; cd_message ("%s (time:%.2f -> %.2f ; charge:%.2f -> %.2f)", __func__, myData.previous_battery_time, myData.battery_time, myData.previous_battery_charge, myData.battery_charge); if(myData.battery_present) { if (myData.previous_battery_time != myData.battery_time) { if(myConfig.quickInfoType == POWER_MANAGER_TIME) { if (myData.battery_time != 0) { CD_APPLET_SET_HOURS_MINUTES_AS_QUICK_INFO (myData.battery_time); } else { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON ("-:--"); } } else if(myConfig.quickInfoType == POWER_MANAGER_CHARGE) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%d%%", (int)myData.battery_charge); } else { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); } bNeedRedraw = TRUE; myData.previous_battery_time = myData.battery_time; } if (myData.previously_on_battery != myData.on_battery || myData.previous_battery_charge != myData.battery_charge) { if (myData.previously_on_battery != myData.on_battery) { myData.previously_on_battery = myData.on_battery; myData.alerted = FALSE; //On a changé de statut, donc on réinitialise les alertes myData.bCritical = FALSE; } if (myConfig.iDisplayType == CD_POWERMANAGER_GAUGE || myConfig.iDisplayType == CD_POWERMANAGER_GRAPH) { double fPercent = (double) myData.battery_charge / 100.; CD_APPLET_RENDER_NEW_DATA_ON_MY_ICON (&fPercent); bNeedRedraw = FALSE; } else if (myConfig.iDisplayType == CD_POWERMANAGER_ICONS) { cd_powermanager_draw_icon_with_effect (myData.on_battery); bNeedRedraw = FALSE; } if(myData.on_battery) { //Alert when battery charge is under a configured value in % if (myData.battery_charge <= myConfig.lowBatteryValue && ! myData.alerted) { 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.battery_charge <= 4 && ! myData.bCritical) { myData.bCritical = TRUE; 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]); } //Embleme sur notre icône CD_APPLET_DRAW_EMBLEM (CAIRO_DOCK_EMBLEM_BLANK, CAIRO_DOCK_EMBLEM_MIDDLE); } else { //Alert when battery is charged if(myData.battery_charge == 100 && ! myData.alerted) cd_powermanager_alert (POWER_MANAGER_CHARGE_FULL); CD_APPLET_DRAW_EMBLEM (CAIRO_DOCK_EMBLEM_CHARGE, CAIRO_DOCK_EMBLEM_MIDDLE); } myData.previously_on_battery = myData.on_battery; myData.previous_battery_charge = myData.battery_charge; } } else { CD_APPLET_SET_LOCAL_IMAGE_ON_MY_ICON ("sector.svg"); bNeedRedraw = TRUE; } if (bNeedRedraw) CD_APPLET_REDRAW_MY_ICON; }
/* Update the icon on new song / status. */ void cd_musicplayer_update_icon (void) { cd_message ("%s (uri : %s / title : %s)", __func__, myData.cPlayingUri, myData.cTitle); if (myData.cPlayingUri != NULL || myData.cTitle != NULL) { if (myData.iPlayingStatus == PLAYER_PLAYING || myData.iPlayingStatus == PLAYER_PAUSED) { // display current song on the label if (myDock) { if ((!myData.cArtist || !myData.cTitle) && myData.cPlayingUri) { gchar *str = strrchr (myData.cPlayingUri, '/'); if (str) str ++; else str = myData.cPlayingUri; CD_APPLET_SET_NAME_FOR_MY_ICON (str); } else CD_APPLET_SET_NAME_FOR_MY_ICON_PRINTF ("%s - %s", myData.cArtist ? myData.cArtist : D_("Unknown artist"), myData.cTitle ? myData.cTitle : D_("Unknown title")); } // display current track on the quick-info. if (myConfig.iQuickInfoType == MY_APPLET_TRACK && myData.iTrackListLength > 0 && myData.iTrackListIndex > 0) { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON_PRINTF ("%s%d", (myDesklet && myDesklet->container.iWidth >= 64 ? D_("Track") : ""), myData.iTrackListIndex); // inutile de redessiner notre icone, ce sera fait plus loin. } else { CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); } // animate the icon and pop-up the dialog. if (myData.iPlayingStatus == PLAYER_PLAYING) { cd_musicplayer_animate_icon (1); if(myConfig.bEnableDialogs) { cd_musicplayer_popup_info (myConfig.iDialogDuration); } } } /**else { cd_musicplayer_apply_status_surface (PLAYER_STOPPED); CD_APPLET_SET_NAME_FOR_MY_ICON (myData.cTitle ? myData.cTitle : myData.pCurrentHandler ? myData.pCurrentHandler->name : myConfig.cDefaultTitle); }*/ // re-paint the icon if needed. if (myConfig.bEnableCover && myData.cover_exist && myData.cCoverPath != NULL) // cover is available { if (cairo_dock_strings_differ (myData.cCoverPath, myData.cPreviousCoverPath)) // and cover has changed -> apply the new one cd_musiplayer_apply_cover (); } else // no cover -> set the status surface. { if ((myConfig.bEnableCover && myData.cPreviousCoverPath != NULL) // currently a cover is set || myData.pPreviousPlayingStatus != myData.iPlayingStatus) // or the status has changed cd_musicplayer_apply_status_surface (myData.iPlayingStatus); } } else // aucune donnees, c'est soit un probleme soit le lecteur qui s'est ferme. { if (myData.bIsRunning) { cd_musicplayer_apply_status_surface (PLAYER_STOPPED); if (myConfig.cDefaultTitle) { CD_APPLET_SET_NAME_FOR_MY_ICON (myConfig.cDefaultTitle); } else if (myData.pCurrentHandler->cDisplayedName != NULL) { CD_APPLET_SET_NAME_FOR_MY_ICON (myData.pCurrentHandler->cDisplayedName); } else { CD_APPLET_SET_NAME_FOR_MY_ICON (myData.pCurrentHandler->name); } } else { cd_musicplayer_apply_status_surface (PLAYER_NONE); if (myConfig.cDefaultTitle) { CD_APPLET_SET_NAME_FOR_MY_ICON (myConfig.cDefaultTitle); } else { CD_APPLET_SET_NAME_FOR_MY_ICON (myApplet->pModule->pVisitCard->cTitle); } } CD_APPLET_SET_QUICK_INFO_ON_MY_ICON (NULL); } }
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); }*/ }